ImageMagick Convert: Làm cách nào để tạo các tệp PNG có kích thước lớn từ các tệp SVG?


8

Tôi đang sử dụng lệnh này để tạo phiên bản sắc nét rộng 512px của tệp SVG mà tôi có:

convert -geometry 256 pinterest.svg pinterest.png

Đây là tệp nguồn:

<?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>

Tuy nhiên, nó tạo ra một PNG mờ:

Pinterest

Vì nguồn của tôi là một minh họa vector, tôi đã mong đợi để có được một hình ảnh sắc nét. Có cách nào để làm vậy không?


2
Vấn đề là width="16px" height="16px"trong tệp SVG. Hãy thử thay đổi lệnh ImageMagick thành convert -resize 3200% pinterest.svg pinterest.pnghình ảnh 512x512. Không chắc chắn nếu bạn sẽ cần -geometry 512quá hay không.
martineau

Điều đó cũng không hiệu quả. Tôi đã thử nó với và không có -geometry. Nó tạo ra một hình ảnh mờ. Thậm chí -densitykhông hoạt động. Tuy nhiên tôi đã xoay sở để đạt được kết quả mong muốn của mình bằng cách sử dụng Apache Batik.
Chương trình lập trình

1
Một cách tiếp cận hơi khác nhau có thể giống như những gì được mô tả trong câu trả lời này .
martineau

Câu trả lời:


5

Tôi có cùng một vấn đề, nhưng tôi đã giải quyết nó bằng cách đặt mật độ trước.

Từ dòng lệnh:

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

1
convert -density 2304 pinterest.svg pinterest.png

Vì DPI ban đầu là 72 và kích thước pixel là 16x16, nên 512/16 * 72 là 2304.


0

Tôi đã không tìm ra cách giải quyết vấn đề này bằng ImageMagick, nhưng tập lệnh rasterize của Apache Batik có thể được sử dụng để chuyển đổi và thay đổi kích thước SVG thành PNG một cách dễ dàng.

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

Xem ở đây để biết thêm thông tin.


2
Chỉ là một nitlog, nhưng thực sự không có nghĩa gì khi gọi một chuyển đổi từ vector sang đồ họa raster là "lossless" - một tệp hình ảnh là một đại diện hoàn toàn khác và sẽ luôn là một xấp xỉ của đồ họa được định nghĩa theo định dạng vector.
martineau
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.