SVG 이미지를 원하는 크기의 PNG 또는 ICO로 일괄 변환


26

VB.Net 2010에서 응용 프로그램을 개발하는 데 사용하려는 SVG 아이콘이 많이 있으며 SVG 아이콘을 처리 할 수 ​​없기 때문에 해당 아이콘을 PNG 또는 ICO로 변환해야합니다. 출력 해상도. 우분투와 같은 명령 줄 도구를 찾았습니다 rsvgconvert. 우리는 Windows 용 도구도 있습니까?

답변:


12

ImageMagick 에는 Linux 및 Windows (및 기타)에서 사용할 수있는 명령 줄 도구가 있습니다. 변환기 도구를 편리하게 "변환"이라고합니다. 다음은 몇 가지의 사용 설명서 .

그리고 여기에 Windows Installer를 구할 수 있습니다 .


다음과 같이 Linux 용 Windows 서브 시스템 (WSL)을 통해이를 얻을 수도 있습니다.apt install imagemagick
antonyh

IM에 -verbose를 설정하면 IM 자체가 inkscape를 사용하여 중간 eps 파일을 생성하는 것처럼 보입니다 (리눅스에 적용되며 창에 적용될 수 있음). 따라서 @zetah의 답변을 제안합니다.
Northern-bradley

다음은 Windows 용 소형 ImageMagick 기반 변환기입니다. fosshub.com/SVG2PNG.html 2014 년부터는 오래되었지만 여전히 작동하며 문서를 읽을 필요가 없습니다.
8day

20

ImageMagick은 이미지와 관련된 배치 작업과 즉시 관련해서는 안됩니다. 특히 ImageMagick이 SVG 변환에 적합하지 않은 경우입니다.

커맨드 라인에서 Inkscape 를 사용 하는 것이 좋습니다 .

inkscape in.svg --export-png=out.png


8
ImageMagick보다 inkscape가 더 좋은 이유는 무엇입니까? 나는 동의하지 않거나 동의하지 않으며 자세한 내용은 궁금합니다.
Sam

imageMagick이 png, jpg 등을 더 잘 처리하는 데 적합한 이유. inkscape는 벡터 이미지를 처리하는 데 더 적합합니다. (svg)
user93

1
그대로, 이것은 일괄 변환 에 대한 질문에 대답 하지 않습니까?
또는 매퍼

대답이 작동하는 동안 Windows InkScape에서는 포커스 잡기 시작 화면을 지연과 함께 표시해야하므로 백그라운드에서 배치 모드로 실행할 수 없습니다.
Timwi

@Timwi 여기서 일어나지 않습니다. -z옵션 을 사용하십시오 .
Svish

5

명령 줄이 기본적으로 작동하지 않았으며 100 파일을 변환하려고했습니다. 다음은 Windows 7에서 작동하게하는 방법입니다.

  1. 휴대용이 아닌 잉크 스케이프를 설치 하십시오!

  2. 모든 svg 파일을 한 폴더에 복사하십시오 (예 : "C : \ svgs \").

  3. convert.bat이 줄 안에 파일 을 만듭니다 .

    FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
    

    (설치의 올바른 폴더를 가리 킵니다) :

  4. 관리자로 CMD를 엽니 다! 이렇게하려면 WIN 키를 누르고 cmd를 입력 한 다음 "cmd.exe"를 마우스 오른쪽 단추로 클릭하고 "관리자 권한으로 실행"을 선택하십시오.

  5. "C : \ svgs \"로 이동하여 다음을 입력하십시오 convert.bat -모든 svg 파일이 PNG로 변환됩니다.

  6. Windows 탐색기를 사용하여 변환 된 PNG 파일을 검색하십시오. 내 PC에서는 폴더에있었습니다.C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

희망이 도움이됩니다.


명령 줄의 해상도는 내가 볼 수있는 한 고정적으로 설정할 수 있었기 때문에 InkscapeBatch 도구를 사용했습니다 . 거기에서 모든 이미지를 상대적으로 늘리도록 DPI를 설정할 수 있습니다.

올바른 설정을 지정해야합니다. 그렇지 않으면 작동하지 않습니다. 여기 내가 한 일이 있습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

"완료"를 누른 후 도구 모음에서 "일괄 변환기 시작 ..."버튼을 눌러야합니다.

여기에 이미지 설명을 입력하십시오


1
배치 명령 %%A에 입력 파일 이름으로 다른 명령이 없을 수 있습니다. 또한 왜 관리자 모드에서만 작동한다고 가정합니까?
또는 매퍼

그렇다면 ImageMagick을 사용하는 것보다 이것이 더 낫습니까?
reinierpost

안타깝게도이 링크도 죽어있는 것 같습니다. (2017 년 8 월)
Ideogram

@Ideogram 다운로드의 다른 공급자를 혼란스럽게했습니다. softsea.com/download/InkscapeBatch.html
Kai Noack

dpi를 지정하려면이 옵션을 추가해야합니다. --export-dpi=100여기서 100은 dpi의 값입니다.
Xsmael


3

SVG에서 PNG로 변환하는 경우 cairosvg ( https://cairosvg.org/ )가 ImageMagick보다 성능이 우수하다는 것을 알았 습니다. 디렉토리의 모든 파일에서 설치 및 실행 단계.

pip3 install cairosvg

.svg 파일이 들어있는 디렉토리에서 Python 쉘을 열고 다음을 실행하십시오.

import os

for file in os.listdir('.'):
    name = file.split('.svg')[0]
    cairosvg.svg2png(url=name+'.svg',write_to=name+'.png') 

또한 원본 .svg 파일을 덮어 쓰지 않지만 동일한 이름을 유지합니다. 그런 다음 다음을 사용하여 모든 .png 파일을 다른 디렉토리로 옮길 수 있습니다.

$ mv *.png [new directory]

이 답변은 다소 큰 SVG 파일에서 작동하는 유일한 답변입니다. 감사합니다 !!!
Ben Sandeen

1

거의 2 시간 동안 이것과 씨름 한 후 나는 Inkscape로 정착했다. 여러 가지 해상도로 많은 파일을 일괄 변환해야했기 때문에 Powershell 스크립트를 만들었습니다. 106 SVG로 컴퓨터가 약 5 초 동안 정지되었으므로 사용할 때주의하십시오.

# ENTER THE FULL PATH TO THE INKSCAPE EXECUTABLE
$inkscapeExe = "C:\Program Files\Inkscape\inkscape.exe"
# ENTER THE PATH TO THE FOLDER CONTAINING THE SVGs
$svgFolder = "C:\Images\SVG"
# ENTER THE DESIRED WIDTH
$width = 120
# ENTER THE DESIRED HEIGHT
$height = 120

$svgFiles = Get-ChildItem $svgFolder -Filter *.svg
foreach ($svgFile in $svgFiles)
{
    $inputParam  = $svgFile.FullName 
    $outputParam = "--export-png=" + $svgFile.FullName + "-" + $width + "x" + $height + ".png" 
    $widthParam  = "-w" + $width
    $heightParam = "-h" + $height

    & $inkscapeExe $inputParam $outputParam $widthParam $heightParam
}

광산은 몇 초 이상 얼었다. &운영자는 새로운 프로세스를 시작하고 당신이 SVG 파일을 가지고이 스크립트는 많은 새로운 inkscape.exe 프로세스로 만들 수 있도록 즉시 계속됩니다. 이것이 컴퓨터를 잠시 동안 느리게 만듭니다.
Rory

| Out-Null시작하는 줄의 끝 부분에 넣으면 &한 번에 하나씩 inkscape.exe 명령을 실행해야하므로 훨씬 효과적입니다.
Rory

1

Windows 용 Bash / Ubuntu의 SVG가있는 폴더에서 다음을 사용할 수 있습니다. 그러나 ImageMagick은 먼저 래스터 화 한 다음 크기를 조정하여 이상한 결과물을 만듭니다.

find -name "*.svg" -exec convert {} -background none -density 300 -resize 256x256 -define icon:auto-resize -alpha remove -colors 256 {}.ico \;

또한 잘 작동하는 것처럼 보이는 Inscape 기반 솔루션을 참조하십시오 (다른 스레드에서 링크 손실). mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=( "${res[@]/#/temp/$f}" ); resm=( "${resm[@]/%/.png}" ); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp;


1
+1 매우 단순화 된 버전에서 inkscape와 함께 사용했습니다. find -name "*.svg" -exec inkscape {} -e {}.png \;이 버전을 선호하지만 ls | grep ".svg" | xargs -I file inkscape file -e file.png파일이 알파벳순으로 처리되기 때문에 —이 파일을 사용할 때는 그렇지 않습니다find
loved.by.Jesus


0

배치를 실행하기 위해 작동하는 단일 명령을 찾을 수 없으므로 파일 목록을 생성하고 일련의 명령을 작성하여 작동하도록했습니다. 이 지침은 모든 버전의 Windows에서 작동합니다. 모든 타이핑 명령어는 따옴표를 제외하고 그 사이의 모든 것을 포함합니다.

이렇게하려면 Inkscape, MS Excel 또는 유사한 스프레드 시트 편집기 및 목록 생성기가 필요합니다. 여기에 훌륭한 프리웨어 목록 생성기가 있습니다 : https://www.portablefreeware.com/?id=1171

  • 모든 svg 파일을 하나의 폴더로 하드 링크, 복사 또는 이동하십시오.
  • 해당 폴더의 파일 목록을 생성하고 csv로 내 보냅니다.
  • Excel에서 csv를 열고 파일 이름 열을 제외한 모든 열을 삭제하십시오. 또한 [경로]와 같은 열 제목과 하단의 요약 텍스트를 삭제하십시오.
  • 파일 이름이 두 번째 열에 없으면 잘라서 붙여 넣습니다.
  • 첫 번째 열의 첫 번째 셀에서 inkscape 뒤에 svg 파일에 후행 백 슬래시 (예 : "inkscape C : \ SVG \")가 포함 된 폴더 경로와 공백이옵니다. 그런 다음이 셀을 복사하고 파일 이름 앞에있는 그 아래의 모든 셀을 선택하고 붙여 넣어 동일한 텍스트를 갖도록하십시오.
  • 세 번째 열에서 첫 번째 셀에 --export-png =를 입력 한 다음 저장하려는 대상 폴더를 입력하십시오. 방금 동일한 폴더를 사용했습니다. 구문이 정확하려면 시작 부분에 공백을 추가하고 나머지 텍스트는 함께 유지하십시오 (예 : "--export-png = C : \ PNG \"). 첫 번째 열과 마찬가지로 모든 행에 복사하여 붙여 넣습니다.
  • 두 번째 열 전체를 복사하여 네 번째 열에 붙여 넣습니다. 네 번째 열을 선택한 상태에서 Ctrl + H (찾기 및 바꾸기)를 누릅니다. 찾기 필드에 ".svg"를 입력하십시오. 바꾸기 필드에 ".png"를 입력 한 다음 모두 바꾸기를 선택하십시오.

이를 올바르게 수행 한 경우 각 파일 이름에 대해 다음과 같은 행이 하나씩 있어야합니다. | inkscape C : \ SVG \ | Filename1.svg | --export-png = C : \ PNG \ | 파일 이름 1.png |

  • 다섯 번째 열의 첫 번째 셀에서 "= concatenate (a2, b2, c2, d2)"를 입력하십시오. 헤더 열이 삭제되지 않은 것으로 가정합니다. 괄호 안의 셀 번호는 현재 행 번호와 일치해야합니다. 첫 번째 파일 이름이 B2 인 경우 위 공식이 정확합니다. 그렇지 않으면 첫 번째 파일 이름 행과 일치하도록 대괄호로 묶인 셀 이름 (예 : a1, b1, c1 ...)
  • 이 셀을 복사하여 붙여 넣으면 열 1과 3과 같이 그 아래에 모두 채워집니다.
  • 이제 다섯 번째 열 전체를 복사하고 Paste Special> Values를 사용하여 수식으로 생성 된 텍스트를 여섯 번째 열에 붙여 넣습니다. 이 여섯 번째 열은 당신의 돈입니다. 여섯 번째 열 전체를 복사하고 메모장을 열고 마지막 열을 붙여 넣습니다. 이 작업을 올바르게 수행하면 각 svg 파일을 png로 변환하는 하나의 명령 줄이 있습니다.
  • 메모장 파일을 Inkscape 디렉터리에 배치 파일로 저장하십시오. 다른 이름으로 저장 창이 열리면 다른 이름으로 저장 유형을 "모든 파일"로 변경하고 .bat 파일로 저장하십시오 (예 : "C : \ Program Files \ Inkscape \ SVGBatch.bat"
  • 남은 것은 해당 폴더로 가서 방금 저장 한 배치 파일을 두 번 클릭하는 것입니다. 명령 프롬프트를 열고 모든 파일을 변환해야합니다.

누군가의 삶을 편하게 해줄 수 있기를 바랍니다. 제임스


0

카이의 대답 은 가깝지만 저에게는 효과가 없었습니다. 그러나 몇 가지 약간의 조정으로 처음부터 완벽하게 작동했습니다.

  1. SVG를 편리한 위치로 복사
  2. 같은 폴더에 텍스트 파일을 만들고 이름을 바꿉니다. convert.bat
  3. convert.bat자주 사용하는 텍스트 / 코드 편집기에서 열고 다음을 입력하십시오.

FOR %%A IN (*.svg) DO "C:\Program Files\Inkscape\inkscape.exe" %%A --export-png=%%A.png

( inkscape.exe위치는 PC의 실행 프로그램 위치와 일치해야하며, 두 번째 이전 --export-png%%A변환되는 SVG 파일입니다.)

  1. convert.bat실행하려면 두 번 클릭 하면 변환 결과가 에코됩니다.

새 파일을 보려면 Windows 폴더를 새로 고쳐야 할 수도 있지만 모두 원본 SVG와 동일한 위치에 만들어 져야합니다.


0

어떤 이유로 든 imagemagick 또는 inkscape를 사용할 수 없습니다. 난 단지 수동으로이 사이트를 사용하는 단지 변환 (12 개) 파일을했다 : http://svgtopng.com/는 치료를했다.


0

주어진 디렉토리의 모든 svg 파일을 ico 파일로 변환하는 ImageMagick 기반 솔루션은 다음과 같습니다.

mogrify -format ico -density 1200 -background transparent -trim -resize 256x256 -gravity center -extent 256x256 -define icon:auto-resize *.svg

설명:

  • mogrify:과 convert같지만 여러 파일을 일괄 처리 할 수 ​​있습니다.
  • -format ico: 대상 파일 형식입니다. .icomogrify가 기본적으로 수행하는 것처럼 원본 파일을 덮어 쓰지 않고 파일을 만듭니다 .
  • -density 1200: ImageMagick이 SVG를 래스터 화해야하는 대상 픽셀 크기를 지정할 수 없으므로 (기본 밀도로 래스터 화 한 다음 크기를 조정) SVG를 매우 높은 해상도 (1200dpi)로 래스터 화하여 이미지를 보장합니다. 업 스케일 대신 256x256 으로 다운 스케일됩니다.
  • -background transparent: 배경이 투명하게 렌더링됩니다.
  • -trim: 이미지 주위의 기존 테두리를 제거합니다.
  • -resize 256x256: 가로 세로 비율을 유지하면서 가장 긴면이 256 픽셀이되도록 이미지 크기를 조정합니다.
  • -gravity center -extent 256x256: 단변이 256 픽셀이되도록 캔버스를 확대합니다. 기존 이미지가 가운데 정렬됩니다. 이것은 ICO 파일의 기초로 정사각형 이미지가 필요하기 때문에 필요합니다.
  • -define icon:auto-resize: ICO 파일에는 256x256 이미지뿐만 아니라 권장되는 모든 축소 된 해상도 (예 : 32x32)도 포함하십시오.

0

여기에 주어진 대부분의 답변 은 원하는 크기 의 질문 부분을 무시합니다 . convertSVG를 "업 스케일"할 때 사용하여 만족스러운 결과를 얻지 못했습니다 . inkscape더 나은 작업을 수행하고 배경 투명도를 유지합니다.

사용 사례에 따라 다음 옵션 중 하나를 사용하십시오.

  1. 지정된 DPI로 내보내기 : inscape in.svg -d 300 -e out.png
  2. 지정된 너비로 내보내기 (가로 세로 비율 유지) : inscape in.svg -w 800 -e output.png
  3. 지정된 높이로 내보내기 (가로 세로 비율 유지) : inscape in.svg -h 600 -e output.png

너비와 높이를 모두 지정해도 종횡비 는 유지 되지 않습니다 .

한 번에 많은 파일을 변환하려면 유스 케이스에 맞게 ( bash또는 호환 가능) 다음을 조정하십시오 .

for f in *.svg; do
  inkscape $f -d 300 -e ${f%.*}.png
done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.