Saya memiliki file SVG yang memiliki ukuran 16x16. Ketika saya menggunakan program konversi ImageMagick untuk mengubahnya menjadi PNG, maka saya mendapatkan PNG 16x16 piksel yang terlalu kecil:
convert test.svg test.png
Saya perlu menentukan ukuran piksel dari keluaran PNG. -size
parameter tampaknya diabaikan, -scale
parameter menskala PNG setelah dikonversi ke PNG. Hasil terbaik hingga sekarang saya dapatkan dengan menggunakan -density
parameter:
convert -density 1200 test.svg test.png
Tapi saya tidak puas, karena saya ingin menentukan ukuran output dalam piksel tanpa melakukan matematika untuk menghitung nilai kerapatan. Jadi saya ingin melakukan sesuatu seperti ini:
convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png
Jadi apa parameter ajaib yang harus saya gunakan di sini?
svg
imagemagick
png
kayahr
sumber
sumber
-size 1024x1024
berfungsi dengan baik, apa versi imagemagick Anda?-resize
hanya meregangkan gambar yang dikonversi, dengan hasil kualitas yang buruk.convert -size 1024x1024 test.svg test.png
berfungsi dengan baik dengan ImageMagick 7.0.7-0 Q16 (versi saat ini di Chocolatey repo untuk Windows). Pastikan itu-size
muncul sebelum nama file input, jika gambar 16x16 akan ditingkatkan untuk memberikan hasil yang buram.Jawaban:
Saya belum bisa mendapatkan hasil yang baik dari ImageMagick dalam hal ini, tetapi Inkscape melakukan pekerjaan yang bagus di Linux dan Windows:
Sunting (Mei 2020): Pengguna Inkscape 1.0, harap perhatikan bahwa argumen baris perintah telah berubah:
Berikut adalah hasil penskalaan 16x16 SVG ke 200x200 PNG menggunakan perintah ini:
Hanya untuk referensi, versi Inkscape saya (di Ubuntu 12.04) adalah:
dan pada Windows 7, itu adalah:
sumber
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -e test.png -w 1024 -h 1024 test.svg
-background none
opsi baris perintah.Coba svgexport :
svgexport adalah alat baris perintah lintas-platform sederhana yang telah saya buat untuk mengekspor file svg ke jpg dan png, lihat di sini untuk opsi lebih lanjut. Untuk menginstal svgexport, instal npm , kemudian jalankan:
Sunting: Jika Anda menemukan masalah dengan perpustakaan, kirimkan di GitHub, terima kasih!
sumber
Ini tidak sempurna tetapi berhasil.
Pada dasarnya itu meningkatkan DPI cukup tinggi (hanya menggunakan tebakan berpendidikan / aman) yang mengubah ukuran dilakukan dengan kualitas yang memadai. Saya mencoba mencari solusi yang tepat untuk ini tetapi setelah beberapa saat memutuskan ini cukup baik untuk kebutuhan saya saat ini.
sumber
-resize 200%
tidak berfungsi dan saya harus menentukan ukuran dalam piksel.-background none
opsi baris perintah. Untuk menjaga rasio gambar, Anda juga bisa menentukan hanya satu dimensi seperti-resize 200
untuk lebar atau-resize x200
untuk tinggi. Lihat: imagemagick.org/script/command-line-processing.php#geometry untuk opsi geometri ImageMagick yang lengkap .Jika Anda menggunakan MacOS X dan mengalami masalah dengan konversi Imagemagick, Anda dapat mencoba menginstalnya dengan lib RSVG. Menggunakan HomeBrew:
Verifikasi bahwa itu didelegasikan dengan benar:
Itu harus ditampilkan
rsvg
.sumber
convert ic_comment_48px.svg -size 30x30 ic_comment_30px.png
dan gambar output adalah 48 x 48. Pastikan imagemagick mendelegasikan ke rsvg seperti yang telah Anda jelaskan.convert
memang mengkonversi svg ke png, tetapi hasilnya sia-sia; setelah menginstal ulang, mereka sempurna. Juga, konversi secara signifikan lebih cepat.invalid option: --with-librsvg
Inkscape tampaknya tidak berfungsi ketika unit svg tidak
px
(mis. Cm). Saya mendapat gambar kosong. Mungkin, itu bisa diperbaiki dengan memutar-mutar dpi, tapi itu terlalu merepotkan.Svgexport adalah program node.js dan secara umum tidak berguna.
Konversi Imagemagick berfungsi dengan baik:
Jika Anda menggunakan
-resize
, gambarnya kabur dan filenya jauh lebih besar.TERBAIK
Ini tercepat, memiliki dependensi paling sedikit, dan output sekitar 30% lebih kecil dari konversi. Instal librsvg2-bin untuk mendapatkannya. Tampaknya tidak ada halaman manual tetapi Anda dapat mengetik:
untuk mendapatkan bantuan. Sederhana itu bagus.
sumber
-a
parameter harus digunakan dengan rsvg.brew install rsvg
di OSX menginstal sejuta hal - GDK, OpenSSL, Python, dll.brew install librsvg
dan perintah konversi adalahrsvg-convert
.rsvg-convert
dalam kasus Arch) untuk memberikan hasil terbaik dan paling konsisten ketika mengkonversi svgs rumit ke png. Tindak lanjuti denganoptipng
mengurangi ukuran file output.Setelah mengikuti langkah-langkah dalam jawaban Jose Alban , saya bisa membuat ImageMagick berfungsi dengan baik menggunakan perintah berikut:
Angka 1536 berasal dari perkiraan kepadatan, lihat jawaban ini untuk informasi lebih lanjut.
sumber
Untuk mengubah skala gambar, opsi
-density
harus digunakan. Sejauh yang saya tahu kepadatan standar adalah 72 dan memetakan ukuran 1: 1. Jika Anda ingin output png dua kali lebih besar dari svg asli, atur kerapatan menjadi 72 * 2 = 144:sumber
convert source.svg -density 144 target.png
tidak akan mengubah skala gambar.convert -density 180 source.svg target.png
mengapa Anda tidak mencoba baris perintah inkscape, ini file bat saya untuk mengonversi semua svg dalam dir ini ke png:
sumber
Saya datang ke posting ini - tetapi saya hanya ingin melakukan konversi secara batch dan cepat tanpa menggunakan parameter apa pun (karena beberapa file dengan ukuran yang berbeda).
Bagi saya persyaratannya mungkin sedikit lebih mudah daripada untuk penulis asli. (Ingin menggunakan SVG di MS PowerPoint, tetapi tidak memungkinkan)
sumber
brew install librsvg
dan perintah konversirsvg-convert
.Di ImageMagick, seseorang mendapat rendering SVG yang lebih baik jika seseorang menggunakan Inkscape atau RSVG dengan ImageMagick daripada MSVG / XML internal yang diberikan. RSVG adalah delegasi yang perlu diinstal dengan ImageMagick. Jika Inkscape diinstal pada sistem, ImageMagick akan menggunakannya secara otomatis. Saya menggunakan Inkscape di ImageMagick di bawah ini.
Tidak ada parameter "ajaib" yang akan melakukan apa yang Anda inginkan.
Tetapi, seseorang dapat menghitung dengan sangat sederhana kepadatan yang dibutuhkan untuk membuat output.
Berikut adalah tombol 50x50 kecil ketika diberikan pada kepadatan default 96:
Misalkan kita ingin output menjadi 500. Inputnya adalah 50 pada kepadatan default 96 (versi Inkscape yang lama mungkin menggunakan 92). Jadi, Anda dapat menghitung kerapatan yang dibutuhkan secara proporsional dengan rasio dimensi dan kerapatan.
Di ImageMagick 7, Anda dapat melakukan perhitungan in-line sebagai berikut:
sumber
Satu hal yang hanya menggigit saya adalah menyetel
-density
SETELAH nama file input. Itu tidak berhasil. Memindahkannya ke opsi pertama di convert (sebelum yang lainnya) membuatnya bekerja (untuk saya, YMMV, dll).sumber
Untuk konversi SVG ke PNG sederhana, saya menemukan cairosvg ( https://cairosvg.org/ ) berkinerja lebih baik daripada ImageMagick. Langkah-langkah untuk menginstal dan menjalankan semua file SVG di direktori Anda.
Buka shell python di direktori yang berisi file .svg Anda dan jalankan:
Ini juga akan memastikan Anda tidak menimpa file .svg asli Anda, tetapi akan tetap menggunakan nama yang sama. Anda kemudian dapat memindahkan semua file .png Anda ke direktori lain dengan:
sumber
cairosvg
di Ubuntu-19,04 melakukan pekerjaan untuk saya.Tanpa librsvg, Anda mungkin mendapatkan gambar png / jpeg hitam. Kita harus menginstal
librsvg
keconvert
file svg dengan imagemagick.Ubuntu
MacOS
sumber
Saya telah memecahkan masalah ini dengan mengubah
width
danheight
atribut<svg>
tag agar sesuai dengan ukuran output yang saya inginkan dan kemudian mengubahnya menggunakan ImageMagick. Bekerja seperti pesona.Ini kode Python saya, sebuah fungsi yang akan mengembalikan konten file JPG:
sumber
Jawaban teratas oleh @ 808sound tidak bekerja untuk saya. Saya ingin mengubah ukuran
dan mendapatkan
Jadi alih-alih saya membuka Inkscape, lalu pergi ke
File
,Export as PNG file
dan sebuah kotak GUI muncul yang memungkinkan saya untuk mengatur dimensi persis yang saya butuhkan.Versi aktif
Ubuntu 16.04 Linux
:Inkscape 0.91 (September 2016)
( Omong-omong, gambar ini dari paket aset Kenney.nl )
sumber
Pada macOS menggunakan minuman, menggunakan librsvg secara langsung berfungsi dengan baik
Banyak opsi tersedia melalui
rsvg-convert --help
sumber
Di Linux dengan Inkscape 1.0 untuk mengkonversi dari svg ke png perlu digunakan
tidak
sumber