ImageMagick Convert: Bagaimana cara menghasilkan file PNG yang diubah ukurannya dari file SVG?


8

Saya menggunakan perintah ini untuk menghasilkan versi lebar SVP 512px yang tajam yang saya miliki:

convert -geometry 256 pinterest.svg pinterest.png

Ini adalah file sumber:

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
         width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path fill="#231F20" d="M8,0C3.582,0,0,3.582,0,8c0,3.275,1.97,6.09,4.789,7.327c-0.022-0.559-0.005-1.229,0.139-1.837
        c0.154-0.649,1.029-4.359,1.029-4.359s-0.255-0.51-0.255-1.266c0-1.186,0.687-2.071,1.542-2.071c0.729,0,1.08,0.547,1.08,1.201
        c0,0.73-0.467,1.825-0.707,2.838c-0.2,0.85,0.426,1.541,1.262,1.541c1.515,0,2.537-1.947,2.537-4.253
        c0-1.753-1.181-3.066-3.329-3.066c-2.427,0-3.938,1.81-3.938,3.831c0,0.697,0.205,1.188,0.528,1.57
        C4.824,9.631,4.845,9.7,4.792,9.902c-0.039,0.147-0.126,0.502-0.163,0.643c-0.054,0.202-0.218,0.274-0.401,0.199
        C3.11,10.289,2.59,9.064,2.59,7.688c0-2.272,1.916-4.997,5.718-4.997c3.053,0,5.065,2.21,5.065,4.582
        c0,3.139-1.746,5.482-4.317,5.482c-0.864,0-1.677-0.467-1.955-0.996c0,0-0.464,1.844-0.562,2.199
        c-0.17,0.616-0.502,1.232-0.805,1.713C6.452,15.885,7.213,16,8,16c4.418,0,8-3.582,8-8S12.418,0,8,0z"/>
</svg>

Namun itu menghasilkan PNG buram:

Pinterest

Karena sumber saya adalah ilustrasi vektor, saya berharap mendapatkan gambar yang tajam. Apakah ada cara untuk melakukannya?


2
Masalahnya adalah width="16px" height="16px"pada file SVG. Coba ubah perintah ImageMagick ke convert -resize 3200% pinterest.svg pinterest.pnguntuk gambar 512x512. Tidak yakin apakah Anda akan membutuhkan -geometry 512terlalu atau tidak.
martineau

Itu juga tidak berhasil. Saya mencobanya dengan dan tanpa -geometry. Ini menghasilkan gambar buram. Bahkan -densitytidak berhasil. Namun saya berhasil mencapai hasil yang saya inginkan menggunakan Batik Batik.
TheFooProgrammer

1
Pendekatan yang sedikit berbeda mungkin seperti apa yang dijelaskan dalam jawaban ini .
martineau

Jawaban:


5

Saya memiliki masalah yang sama, tapi saya mengatasinya dengan mengatur kepadatan terlebih dahulu.

Dari baris perintah:

for %f in (*.svg) do (convert -antialias -background transparent -density 600 -resize 1024x1024 %f %~nf.png)

1
convert -density 2304 pinterest.svg pinterest.png

Karena DPI asli adalah 72 dan ukuran piksel 16x16, jadi 512/16 * 72 adalah 2304.


0

Saya tidak menemukan cara untuk mengatasi masalah ini menggunakan ImageMagick, tetapi script rasterize Apache Batik dapat digunakan untuk mengkonversi dan mengubah ukuran SVG ke PNG dengan cara lossless.

java -jar batik-rasterizer.jar samples/batikFX.svg

Lihat di sini untuk informasi lebih lanjut.


2
Hanya sebuah nitpick, tetapi benar-benar tidak masuk akal untuk memanggil konversi dari vektor ke grafis raster "lossless" - file gambar adalah representasi yang sama sekali berbeda dan akan selalu menjadi perkiraan grafis yang didefinisikan dalam format vektor.
martineau
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.