Aplikasi command-line untuk mengubah SVG ke PNG di Mac OS X

167

Apakah ada program command-line yang dapat mengkonversi SVG ke PNG, yang berjalan di Mac OS X?

Sunting : Dylan B punya jawaban yang bagus dengan ImageMagick. Untuk referensi, untuk menginstal ImageMagick dengan dukungan SVG di Mac OS X menggunakan MacPorts, lakukan

port install imagemagick +rsvg
Lorin Hochstein
sumber
2
Saya menemukan cara jika Anda memiliki Google Chrome ... dan tidak perlu menginstal hal-hal lain: superuser.com/questions/134679/…
nopole
cairosvg.org berfungsi untuk python3 dan tampaknya tidak memiliki masalah. pip3 install cairosvg
JayRizzo

Jawaban:

234

Atau tanpa menginstal apa pun:

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

Ini akan menghasilkan picture.svg.png yang lebarnya 1000 piksel.

Saya telah mengujinya hanya pada OS X 10.6.3.

pertama
sumber
38
Sayangnya ini klip gambar ke kotak.
Martijn Pieters
7
Ah, qlmanage -tberikan thumbnail yang digunakan oleh Quick Look (di Finder, dll). Ide pintar Sayangnya, thumbnail ini bisa buggy, terutama ketika ada teks yang terlibat.
ShreevatsaR
7
Ini menghasilkan gambar dengan file svg di kuadran 1. Tidak memotong otomatis. Mencoba mengonversi file dari proyek kata benda - semoga ini berhasil.
Alex Cook
7
Solusi ini gagal memperhitungkan transparansi. Alat rsvg-convertdalam jawaban @ ahti bekerja sebelumnya untuk saya.
BenR
3
Menempatkan parameter lebar dan tinggi setelah -sopsi tidak berfungsi untuk saya. Masih memotongnya menjadi persegi. Sangat membuat frustrasi!
Erik van der Neut
107

Saya menemukan bahwa bagi saya alat terbaik untuk pekerjaan itu adalah rsvg-convert.

Ini dapat ditemukan dalam minuman dengan brew install librsvgdan digunakan seperti ini:

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

(Contoh ini membuat png tinggi 32px. Lebar ditentukan secara otomatis.

Ahti
sumber
Ini adalah satu-satunya yang bekerja untuk saya di Mavericks dan commons.wikimedia.org/wiki/…
Aron Ahmadia
Sebenarnya yang ini berhasil, sementara ImageMagick convertmengeluarkan kesalahan dan gagal menyamarkan SVG yang rumit
Brice
7
Sejauh ini, ini adalah solusi terbaik yang saya temukan untuk OS X Yosemite +1!
Greg Martin
Ini gagal untuk beberapa SVG saya, anehnya. The qlmanagejawaban bekerja untuk mereka semua tetapi menempatkan latar belakang putih, yang saya tidak mau.
sudo
1
Dengan rsvg-convert, .png yang dihasilkan memiliki dimensi yang tepat, tetapi gambar keluar semua hitam, bukan warna aslinya. Dengan qlmanagegambar dipotong menjadi persegi. Masih mencari solusi :-(
Erik van der Neut
43

ImageMagick adalah editor gambar command-line yang sangat fleksibel, yang mungkin akan menyaingi Photoshop jika itu, Anda tahu, GUI. Tapi siapa yang butuh itu? : P

Sesuatu seperti yang berikut ini akan mengonversi .svg ke .png, setelah instalasi:

$ convert picture.svg picture.png

.Svg asli tidak terhapus.

Jessie
sumber
Itu semacam memiliki GUI, di display.
Ignacio Vazquez-Abrams
1
Ketika saya menginstal ImageMagick dengan Fink, saya tidak bisa mengonversi svg ke png - ada beberapa kesalahan. Ternyata saya perlu menginstal librsvg2-bin juga.
tst
Jika librsvg2-bin tidak diinstal (seperti pada OS X) ini akan gagal. Tidak dapat menemukan cara untuk menginstalnya di OS X.
John Sheehan
3
Ini tidak akan berfungsi dengan baik jika Anda ingin mengubah ukuran SVG karena menghasilkan gambar buram.
Behrang
3
Itu tidak mengkonversi semua file SVG dengan benar; setidaknya qlmanage mendapatkan semua bagian gambar.
Johan
28

Inkscape dengan Commandline-Interface-nya menghasilkan hasil terbaik bagi saya:

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

Untungnya, Anda dapat menentukan ukuran piksel yang tepat dari gambar yang dihasilkan, tanpa harus mengacaukan kepadatan.

seb
sumber
ini bekerja untuk saya! - ihave SVG yang lebih besar yang dibuat dengan Inkscape
matheszabi
Ini adalah satu-satunya metode yang menerjemahkan svg tulisan tangan saya dengan benar
Griffin
Konversi tidak menghasilkan file PNG yang baik dari SVG. Menggunakan Inkscape adalah cara terbaik yang saya temukan sejauh ini.
ol_v_er
Ini berfungsi untuk saya, tetapi membuat file yang sangat buram.
Marcin
3
Saya punya masalah untuk menemukan file jadi jalankan sebagaiinkscape $(pwd)/logo.svg --export-png $(pwd)/logo.png
Andrei
16

OK, saya menemukan cara sederhana untuk melakukannya di Mac jika Anda memiliki Google Chrome.

Dalam satu kalimat, itu untuk melihat svggambar di halaman web (harus dalam htmlfile), klik kanan pada gambar dan pilih "Salin Gambar" dan tempel ke aplikasi Pratinjau.

Langkah:

  1. Unduh atau miliki svgfile di hard drive Anda, katakan,somefile.svg
  2. Sekarang, di folder yang sama, buat saja file html tmp.htmlyang berisi baris ini:<img src="somefile.svg">
  3. Sekarang, buka file html itu di Google Chrome
  4. Anda harus melihat gambar. Sekarang klik kanan pada gambar dan pilih "Salin Gambar"
  5. Buka Aplikasi Pratinjau Mac, dan pilih, "File -> New from Clipboard"
  6. Sekarang File -> Savefile dan Anda punya pngfile. (atau jenis file lainnya).

Ini diuji pada Chrome saat ini (versi 48.0) di Mac OS X El Capitan.

Pembaruan : Saya tidak yakin apakah ini disebabkan oleh pembatasan yang diberlakukan oleh Google Chrome. Saya hanya mencoba file SVG menggunakan Chrome 58.0, dan saya mendapatkan gambar kecil dari metode di atas. Jika Anda melihat kasing ini juga, Anda juga dapat menggunakan

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

dan Anda akan memiliki gambar di layar yang cukup baik untuk Anda lakukan tangkapan layar - menggunakan CmdShift4atau CmdShift3di Mac, misalnya. Pastikan Anda mengubah ukuran jendela Chrome hingga maksimum yang diizinkan di layar.

nopole
sumber
Solusi cerdas!
Manu
1
Ini sebenarnya menghasilkan hasil terbaik bagi saya karena itu membuat persis sama dengan browser.
Jason Haslam
gambar yang dihasilkan adalah resolusi yang sangat buruk bagi saya
Michael
Cerdik :) tetapi untuk SVG yang sangat besar, resolusi gambar yang dihasilkan terlalu rendah, seperti yang disebutkan @Michael.
Waldyrious
5

Jika Anda ingin melakukan banyak sekaligus, Anda dapat:

mogrify -format png *.svg

Ada opsi untuk mengubah ukuran dll dengan cepat, juga ..

DefenestrationDay
sumber
3
mogrifyjuga setara dengan ImageMagick.
ShreevatsaR
Berfungsi bagus, tapi lambat sekali.
Meekohi
-1? Seseorang berpikir ini tidak membantu? Apa kesalahannya?
DefenestrationDay
2
Saya bukan orang yang downvoting, tetapi perlu dicatat adalah bahwa ImageMagick dengan bodoh mengkonversi svg ke gambar raster ukuran sewenang-wenang sebelum mengubah ukuran, sehingga menghasilkan keluaran buram.
Dae
4

Coba Batik Apache .

java -jar batik-rasterizer.jar FILES

Ini juga mendukung konversi batch dan memiliki banyak opsi bermanfaat lainnya.

Behrang
sumber
4

Saya telah membuat svgexport menggunakan node / npm untuk ini, ini adalah cross-platform dan dapat sesederhana:

svgexport input.svg output.png
Ali Shakiba
sumber
Ini yang paling mudah digunakan dan diingat sejauh ini. Juga, satu-satunya yang menghasilkan hasil yang benar dalam kasus saya.
Marko Grešak
resolusi yang dihasilkan tidak bagus untuk saya.
Michael
3

Anda juga dapat menggunakan phantomjs untuk membuat svg. Keuntungannya adalah ia menjadikannya seperti browser karena pada dasarnya WebKit tanpa kepala.

Setelah Anda mengunduhnya, Anda memerlukan phantomjs (binary) dan file rasterizer.js dari folder contoh.

phantomjs examples/rasterize.js Tiger.svg out.png
Stofke
sumber
1
Untuk referensi, ini dapat diinstal dengan brew cask install phantomjs. Dalam instal saya, folder contoh berada di jalur /usr/local/Caskroom/phantomjs/2.1.1/phantomjs-2.1.1-macosx/examples/.
waldyrious
2

Inilah yang saya gunakan:

brew install imagemagick --with-librsvg

Kemudian jalankan perintah berikut:

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

Semoga ini bisa membantu.

Alan Dong
sumber
1

Saya menggunakan perintah ini di linux saya. Ini seharusnya bekerja untuk Anda juga.

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

Saya belajar bahwa tanpa argumen "-density", bitmap akan sangat pixelized. Ubah nilai -densitas agar sesuai dengan kebutuhan Anda.

BersekerBernhard
sumber
2
Bahkan dengan kepadatan, konversi tidak menghasilkan gambar yang setajam gambar vektor. Coba Apache Batik sebagai gantinya.
Behrang
1

Perintah konversi ImageMagick, menggunakan beberapa parameter lain, adalah apa yang dilakukan untuk saya. Inilah solusi batch script Bash saya yang membagi tugas di beberapa proses untuk memanfaatkan semua inti Anda! Ubah sesuai kebutuhan.

batchConvertToSVG.sh (menganggap sejumlah proses sebagai argumen):

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
sudo
sumber
0

Seperti yang dikomentari sebelumnya, ImageMagick berhasil. Saya hanya ingin menambahkan titik untuk GraphicsMagick , garpu tua dari ImageMagick yang memiliki beberapa perbaikan (dan jauh lebih sedikit ketergantungan ketika diinstal melalui fink).


sumber
0

Anda dapat melakukan konversi batch pada seluruh folder file SVG ke PNG. Saya menggunakan antarmuka baris perintah Inkscape untuk menghasilkan file png dengan lebar 80px.

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

png akan disimpan dengan nama asli * .png

James Matthew Mudgett
sumber
0

Namun metode lain tanpa menginstal apa pun. Namun tidak di baris perintah.

  1. Buka file .svg di Safari.
  2. Tekan alt-command-i untuk membuka inspektur.
  3. Klik kanan pada <svg>tag, pilih "Capture Screenshot". (Perhatikan bahwa Anda tidak boleh memperbesar gambar.)

PS Untuk memperbesar gambar .svg jika terlalu kecil, coba buka file .svg di editor teks dan tambahkan 0ke setiap angka kecuali dalam atribut-meta. Ini dapat dilakukan oleh substitusi global regex dari (\d+)ke $10, di mana $1placeholder untuk referensi kembali, misalnya.

Haotian Yang
sumber
Anda mungkin harus menyebutkan bahwa ini hampir sama dengan  jawaban 太極 者 無極 而 生 .
Scott
-1

wkhtmltoimage (dari project wkhtmltopdf) melakukan konversi dengan baik:

wkhtmltoimage --zoom 2 foo.svg foo.png

ImageMagick merender karakter CJK sebagai kosong di mac saya.

georgexsh
sumber
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah. - Dari Ulasan
Blackwood
@ Blackwood baik-baik saja, diperbarui.
georgexsh