แอปพลิเคชันบรรทัดคำสั่งสำหรับการแปลง SVG เป็น PNG บน Mac OS X


167

มีโปรแกรมบรรทัดคำสั่งใดบ้างที่สามารถแปลง SVG เป็น PNG ที่ทำงานบน Mac OS X ได้หรือไม่

แก้ไข : Dylan B มีคำตอบที่ดีกับ ImageMagick สำหรับการอ้างอิงในการติดตั้ง ImageMagick ด้วยการรองรับ SVG บน Mac OS X โดยใช้ MacPorts ให้ทำ

port install imagemagick +rsvg

2
ฉันพบวิธีถ้าคุณมี Google Chrome ... และไม่จำเป็นต้องติดตั้งสิ่งอื่นใด: superuser.com/questions/134679//
nopole

cairosvg.org ทำงานได้กับ python3 และดูเหมือนว่าจะไม่มีปัญหา pip3 install cairosvg
JayRizzo

คำตอบ:


234

หรือไม่ต้องติดตั้งอะไร:

qlmanage -t -s 1000 -o . picture.svg 

มันจะสร้าง picture.svg.png ที่มีความกว้าง 1,000 พิกเซล

ฉันได้ทำการทดสอบบน OS X 10.6.3 เท่านั้น


38
น่าเสียดายที่คลิปนี้เป็นรูปสี่เหลี่ยม
Martijn Pieters

7
อ๊ะqlmanage -tแสดงภาพขนาดย่อที่ใช้โดย Quick Look (ใน Finder และอื่น ๆ ) ความคิดที่ฉลาด น่าเสียดายที่รูปขนาดย่อเหล่านี้สามารถบั๊กกี้ได้โดยเฉพาะเมื่อมีข้อความเกี่ยวข้อง
ShreevatsaR

7
สิ่งนี้สร้างภาพด้วยไฟล์ svg ในควอดเร้นท์ที่ 1 ไม่ครอบตัดอัตโนมัติ กำลังพยายามแปลงไฟล์จากโครงการคำนาม - หวังว่ามันจะทำงานได้
Alex Cook

7
วิธีนี้ไม่ได้คำนึงถึงความโปร่งใส เครื่องมือrsvg-convertในคำตอบของ @ ahti ทำงานมาก่อนสำหรับฉัน
BenR

3
การใส่พารามิเตอร์ทั้งความกว้างและความสูงหลังจาก-sตัวเลือกไม่ทำงานสำหรับฉัน ยังคงปลูกพืชเป็นสี่เหลี่ยม น่าผิดหวังมาก!
Erik van der Neut

107

rsvg-convertฉันพบว่าสำหรับฉันเครื่องมือที่ดีที่สุดสำหรับงานที่เป็น

มันสามารถพบได้ในการชงด้วยbrew install librsvgและมีการใช้เช่นนี้:

rsvg-convert -h 32 icon.svg > icon-32.png

(ตัวอย่างนี้สร้าง png สูง 32px ความกว้างถูกกำหนดโดยอัตโนมัติ


นี่เป็นคนเดียวที่ทำงานกับฉันใน Mavericks และcommons.wikimedia.org/wiki/ …
Aron Ahmadia

อันที่จริงคนนี้ทำงานในขณะที่ ImageMagick ของconvertออกข้อผิดพลาดและล้มเหลวในการแอบแฝง SVG ซับซ้อน
ไบรส์

7
นี่คือทางออกที่ดีที่สุดที่ฉันพบสำหรับ OS X Yosemite +1!
Greg Martin

สิ่งนี้ล้มเหลวสำหรับ SVG บางตัวของฉันอย่างแปลกประหลาด qlmanageคำตอบที่ทำงานทั้งหมดของพวกเขา แต่ใส่พื้นหลังสีขาวซึ่งผมไม่ต้องการ
sudo

1
ด้วยrsvg-convert. png ที่ได้นั้นมีขนาดที่ถูกต้อง แต่ภาพออกมาเป็นสีดำทั้งหมดแทนที่จะเป็นสีดั้งเดิม ด้วยqlmanageภาพที่ถูกครอบตัดเป็นสี่เหลี่ยมจัตุรัส ยังคงค้นหาวิธีแก้ปัญหา :-(
Erik van der Neut

43

ImageMagickเป็นอย่างยิ่งโปรแกรมแก้ไขภาพบรรทัดคำสั่งที่หลากหลายซึ่งอาจจะเป็นคู่แข่ง Photoshop ถ้ามันมีคุณรู้ว่ากุย แต่ใครต้องการอะไรเหล่านั้น : P

สิ่งต่อไปนี้จะแปลง. svg เป็น. png หลังจากการติดตั้ง:

$ convert picture.svg picture.png

. svg ดั้งเดิมจะไม่ถูกลบ


มันเรียงลำดับของการมี GUI displayใน
Ignacio Vazquez-Abrams

1
เมื่อฉันติดตั้ง ImageMagick ด้วย Fink ฉันไม่สามารถแปลง svg เป็น png ได้ - เกิดข้อผิดพลาดบางอย่าง มันกลับกลายเป็นว่าฉันต้องการติดตั้ง librsvg2-bin เช่นกัน
ทีเอสที

หากไม่ได้ติดตั้ง librsvg2-bin (เช่นบน OS X) สิ่งนี้จะล้มเหลว ไม่พบวิธีติดตั้งบน OS X
John Sheehan

3
วิธีนี้ใช้ไม่ได้ผลหากคุณต้องการปรับขนาด SVG เนื่องจากสร้างภาพเบลอ
Behrang

3
มันไม่แปลงไฟล์ SVG ทั้งหมดอย่างถูกต้องเช่นกัน อย่างน้อย qlmanage ได้ทุกส่วนของภาพ
Johan

28

Inkscapeด้วย Commandline-Interface นั้นให้ผลลัพธ์ที่ดีที่สุดสำหรับฉัน:

/Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png output.png -w 1024 -h 768 input.svg

ข้อดีคือคุณสามารถระบุขนาดพิกเซลที่แน่นอนของภาพที่ได้โดยไม่ต้องยุ่งกับความหนาแน่น


มันใช้งานได้สำหรับฉัน! - ฉันมี SVG ที่ใหญ่กว่าที่สร้างขึ้นด้วย Inkscape
matheszabi

นี้เป็นวิธีเดียวที่แสดงผลแบบ SVG ที่เขียนด้วยมือของฉันได้อย่างถูกต้อง
กริฟฟิ

การแปลงไม่สร้างไฟล์ PNG ที่ดีจาก SVG การใช้ Inkscape เป็นวิธีที่ดีที่สุดที่ฉันค้นพบ
ol_v_er

สิ่งนี้ใช้ได้สำหรับฉัน แต่สร้างไฟล์ที่พร่ามัวมาก
Marcin

3
ฉันมีปัญหาในการค้นหาไฟล์ดังนั้นให้เรียกใช้เป็นinkscape $(pwd)/logo.svg --export-png $(pwd)/logo.png
อังเดร

16

ตกลงฉันพบวิธีง่ายๆในการทำบน Mac หากคุณมี Google Chrome

ในหนึ่งประโยคมันคือการเห็นsvgภาพในหน้าเว็บ (ต้องอยู่ในhtmlไฟล์) คลิกขวาที่ภาพและเลือก "คัดลอกภาพ" และวางลงในแอพดูตัวอย่าง

ขั้นตอน:

  1. ดาวน์โหลดหรือมีsvgไฟล์ในฮาร์ดไดรฟ์ของคุณพูดsomefile.svg
  2. ตอนนี้ในโฟลเดอร์เดียวกันเพียงแค่สร้างไฟล์ html tmp.htmlที่มีบรรทัดนี้:<img src="somefile.svg">
  3. ตอนนี้เปิดไฟล์ html นั้นใน Google Chrome
  4. คุณควรเห็นภาพ ตอนนี้เพียงคลิกขวาที่ภาพและเลือก "คัดลอกภาพ"
  5. ไปที่แอพ Preview ของ Mac แล้วเลือก "File -> New from Clipboard"
  6. ตอนนี้File -> Saveไฟล์และคุณมีpngไฟล์ (หรือประเภทไฟล์อื่น ๆ )

นี่เป็นการทดสอบบน Chrome ปัจจุบัน (รุ่น 48.0) บน Mac OS X El Capitan

อัปเดต : ฉันไม่แน่ใจว่าเป็นเพราะข้อ จำกัด ของ Google Chrome หรือไม่ ฉันเพิ่งลองใช้ไฟล์ SVG โดยใช้ Chrome 58.0 และฉันได้ภาพเล็ก ๆ จากวิธีการด้านบน หากคุณเห็นกรณีนี้เช่นกันคุณสามารถใช้

<img src="somefile.svg" style="height: 82vh; margin-top: 9vh; margin-left: 9vh">

และคุณจะมีภาพบนหน้าจอที่ดีพอสำหรับคุณที่จะทำภาพหน้าจอ - โดยใช้CmdShift4หรือCmdShift3บน Mac ตัวอย่างเช่น ตรวจสอบให้แน่ใจว่าคุณปรับขนาดหน้าต่าง Chrome เป็นขนาดสูงสุดที่อนุญาตบนหน้าจอ


โซลูชันอัจฉริยะ!
มนู

1
สิ่งนี้ให้ผลลัพธ์ที่ดีที่สุดสำหรับฉันเพราะมันให้ผลลัพธ์เหมือนกับเบราว์เซอร์
เจสัน Haslam

ภาพที่ได้มีความละเอียดต่ำมากสำหรับฉัน
Michael

แยบยล :) แต่สำหรับ SVG ที่มีขนาดใหญ่มากความละเอียดของภาพที่ได้จะต่ำเกินไปตามที่ @Michael พูดถึง
waldyrious

5

หากคุณต้องการทำหลายอย่างพร้อมกันคุณสามารถ:

mogrify -format png *.svg

มีตัวเลือกในการปรับขนาด ฯลฯ ได้ทันทีเช่นกัน


3
mogrifyยังเป็นส่วนหนึ่งของ ImageMagick
ShreevatsaR

ใช้งานได้ดี แต่ช้าอย่างไร้ความปราณี
Meekohi

-1? มีคนคิดว่าสิ่งนี้ไม่เป็นประโยชน์หรือไม่? ข้อผิดพลาดคืออะไร
Defenestration

2
ฉันไม่ใช่คนที่ downvote แต่น่าสังเกตว่า ImageMagick แปลง stvidly svg ให้เป็นภาพแรสเตอร์ที่มีขนาดตามอำเภอใจก่อนที่จะทำการย่อขนาด
แด

4

ลองApache ผ้าบาติก

java -jar batik-rasterizer.jar FILES

นอกจากนี้ยังรองรับการแปลงแบบกลุ่มและมีตัวเลือกที่มีประโยชน์อื่น ๆ อีกมากมาย


4

ฉันทำsvgexportโดยใช้ node / npm สำหรับสิ่งนี้มันเป็น cross-platform และสามารถทำได้ง่ายเหมือน:

svgexport input.svg output.png

นี่เป็นวิธีที่ง่ายที่สุดในการใช้และจดจำโดยไกล นอกจากนี้คนเดียวที่สร้างผลลัพธ์ที่ถูกต้องในกรณีของฉัน
Marko Grešak

ความละเอียดที่ได้จึงไม่ดีสำหรับฉัน
ไมเคิล

3

คุณยังสามารถใช้phantomjsเพื่อแสดงผล svg ข้อดีคือมันทำให้มันเหมือนเบราว์เซอร์เพราะมันเป็น WebKit ที่ไร้หัว

เมื่อคุณดาวน์โหลดแล้วคุณจะต้องphantomjs (ไบนารี) และไฟล์rasterizer.jsจากโฟลเดอร์ตัวอย่าง

phantomjs examples/rasterize.js Tiger.svg out.png

1
brew cask install phantomjsสำหรับการอ้างอิงนี้สามารถติดตั้งกับ /usr/local/Caskroom/phantomjs/2.1.1/phantomjs-2.1.1-macosx/examples/ในของฉันติดตั้งโฟลเดอร์ตัวอย่างที่ตั้งอยู่ในเส้นทาง
waldyrious

2

นี่คือสิ่งที่ฉันใช้:

brew install imagemagick --with-librsvg

จากนั้นรันคำสั่งต่อไปนี้:

find . -type f -name "*.svg" -exec bash -c 'convert $0 $0.png' {} \; rename 's/svg\.png/png/' *

หวังว่ามันจะช่วย


1

ฉันใช้คำสั่งนี้กับ linux ของฉัน มันควรจะทำงานให้คุณเช่นกัน

mogrify +antialias -density 2000 -verbose -format png *.svg

ฉันเรียนรู้ว่าถ้าไม่มีอาร์กิวเมนต์ "-density" บิตแมปจะเป็นแบบพิกเซลมาก เปลี่ยนค่า -density ให้ตรงกับความต้องการของคุณ


2
แม้จะมีความหนาแน่นการแปลงจะไม่สร้างภาพที่คมชัดเท่ากับภาพเวกเตอร์ ลอง Apache Batik แทน
Behrang

1

คำสั่งการแปลงของ ImageMagick โดยใช้พารามิเตอร์อื่น ๆ เป็นสิ่งที่ทำให้ฉัน ต่อไปนี้เป็นโซลูชันแบทช์สคริปต์แบชของฉันที่แบ่งงานในหลายกระบวนการเพื่อใช้ประโยชน์จากคอร์ทั้งหมดของคุณ! แก้ไขตามต้องการ

batchConvertToSVG.sh (ใช้จำนวนกระบวนการเป็นอาร์กิวเมนต์):

end=$(( $1 - 1 ))
for i in `seq 0 $end`;
        do
            echo Spawning helper $i of $end
                ./convertToSvgHelper.sh $i $1 &
        done 

convertToSvgHelper.sh:

n=$1
for file in ./*.svg; do
   filename=${file%.svg}
   echo converting file named $filename
   test $n -eq 0 && convert -format png -resize 74 -background transparent -density 600 $file $filename.png
   n=$((n+1))
   n=$((n%$2))
done

0

ตามที่แสดงความคิดเห็นก่อนหน้านี้ ImageMagick ทำเคล็ดลับ ฉันต้องการเพิ่มจุดสำหรับGraphicsMagickซึ่งเป็นทางแยกเก่าของ ImageMagick ที่มีการปรับปรุงบางอย่าง


0

คุณสามารถทำการแปลงแบบแบตช์ในทั้งโฟลเดอร์ของไฟล์ SVG เป็น PNG ฉันใช้อินเตอร์เฟสบรรทัดคำสั่ง Inkscape เพื่อสร้างไฟล์ png ที่มีความกว้าง 80px

find ~/desktop/toconvert '*.svg' -exec /Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -w 80 -e "{}".png "{}" \;

png จะถูกบันทึกด้วยชื่อเดิม * .png


0

อีกวิธีหนึ่งโดยไม่ต้องติดตั้งอะไร ไม่ได้อยู่ในบรรทัดคำสั่ง

  1. เปิดไฟล์. svg ใน Safari
  2. กด alt-command-i เพื่อเปิดตัวตรวจสอบ
  3. คลิกขวาที่<svg>แท็กเลือก "จับภาพหน้าจอ" (โปรดทราบว่าคุณจะต้องไม่ขยายภาพ)

PS หากต้องการขยายภาพ. svg หากไฟล์มีขนาดเล็กเกินไปให้ลองเปิดไฟล์. svg ในเท็กซ์เอดิเตอร์และผนวก0เข้ากับทุกหมายเลขยกเว้นในเมตาแอ็ตทริบิวต์ สิ่งนี้สามารถทำได้โดยการทดแทนโกลบอล regex จาก(\d+)ถึง$10ซึ่ง$1เป็นตัวยึดตำแหน่งสำหรับการอ้างอิงกลับตัวอย่างเช่น


คุณอาจจะพูดถึงว่านี้เกือบจะเป็นเช่นเดียวกับ  คำตอบ太極者無極而生's
Scott

-1

wkhtmltoimage (จากโครงการ wkhtmltopdf) นี้ทำได้ดีมาก:

wkhtmltoimage --zoom 2 foo.svg foo.png

ImageMagick แสดงตัวอักษร CJK เป็นค่าว่างบน mac ของฉัน


แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง - จากการรีวิว
แบล็กวูด

@Blackwood ปรับแล้วอัปเดต
georgexsh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.