ImageMagick 변환 : SVG 파일에서 선명한 크기의 PNG 파일을 생성하는 방법은 무엇입니까?


8

이 명령을 사용하여 512px 너비의 SVG 파일을 선명하게 생성합니다.

convert -geometry 256 pinterest.svg pinterest.png

이것은 소스 파일입니다.

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

그러나 흐릿한 PNG가 생성됩니다.

Pinterest

내 출처가 벡터 일러스트이므로 선명한 이미지를 기대하고있었습니다. 그렇게 할 수있는 방법이 있습니까?


2
문제는 width="16px" height="16px"SVG 파일에 있습니다. convert -resize 3200% pinterest.svg pinterest.png512x512 이미지로 ImageMagick 명령을 변경해보십시오 . -geometry 512너무 필요한지 확실 하지 않습니다.
martineau

그것은 작동하지 않았다. 나는 유무에 관계없이 그것을 시도했다 -geometry. 흐릿한 이미지를 생성합니다. 심지어 -density작동하지 않습니다. 그러나 Apache Batik을 사용하여 원하는 결과를 얻었습니다.
TheFooProgrammer

1
약간 다른 접근법은이 답변 에서 설명한 것과 비슷할 수 있습니다 .
martineau

답변:


5

나는 같은 문제가 있었지만 밀도를 먼저 설정하여 문제를 해결했습니다.

명령 행에서 :

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

1
convert -density 2304 pinterest.svg pinterest.png

원래 DPI는 72이고 픽셀 크기는 16x16이므로 512 / 16 * 72는 2304입니다.


0

ImageMagick을 사용 하여이 문제를 해결할 수있는 방법을 찾지 못했지만 Apache Batik의 래스터 화 스크립트를 사용하여 SVG를 PNG로 변환하고 무손실 방식으로 크기를 조정할 수 있습니다.

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

자세한 내용은 여기 를 참조하십시오.


2
단순한 선택이지만 벡터에서 래스터 그래픽으로의 "무손실"변환을 호출하는 것은 실제로 의미가 없습니다. 이미지 파일은 완전히 다른 표현이며 항상 벡터 형식으로 정의 된 그래픽의 근사치입니다.
martineau
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.