명령줄에서 캔버스 크기에 맞게 SVG 그림 자르기

명령줄에서 캔버스 크기에 맞게 SVG 그림 자르기

캔버스 외부에 그리기의 일부가 포함된 PlantUML에서 생성된 SVG 이미지가 있습니다. 이러한 이미지는 사용하기 어려우며 캔버스 크기에 맞게 그림을 잘라야 합니다. 어쨌든 스크립트로 UML 다이어그램을 생성하므로 거기서도 자르기를 수행하는 것이 정말 효율적일 것입니다.

지금까지 나는 두 가지를 시도했습니다: a) Inkscape를 사용하여 캔버스 크기를 그림에 맞게 조정

inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

이것은 잘 작동하지만 그림을 캔버스 크기로 잘라야 하는데 이 작업을 사용할 수 없는 것 같습니다.

b) rsvg-convert로 크기 조정

rsvg-convert image.svg -w 1870 -h 1195 -f svg -o image.svg

이렇게 하면 원하는 크기로 정확하게 자르지만 SVG에 일부 이진 이미지가 포함되어 있으므로 이미지 크기가 ~10배 증가합니다. 이것은 나에게 용납되지 않습니다.

답변1

나는 orion의 제안을 사용하여 그렇게 하는 우아하지 않은 방법을 발견했습니다. 가정은 $svg_file_nameSVG 이미지에 대한 파일 경로를 포함하는 변수입니다.

먼저 이미지 너비와 높이가 필요합니다.

width=$(exiftool -ImageWidth $svg_file_name | sed "s/.*: //;s/pt//g")
height=$(exiftool -ImageHeight $svg_file_name | sed "s/.*: //;s/pt//g")

PlantUML은 다이어그램을 단일 그룹(태그 <g>)으로 생성합니다. 해당 그룹 위에 캔버스 크기의 직사각형을 배치해 보겠습니다.

sed -i "s|</g>|</g><polygon fill=\"#FFFFFF\" points=\"0,0,0,$height,$width,$height,$width,0\" style=\"stroke: #000000; stroke-width: 1.0;\"/>|" $svg_file_name

이제 inkscape로 이미지를 열고 모두 선택하고 직사각형으로 그룹을 자릅니다.

inkscape --verb=EditSelectAll --verb=ObjectSetClipPath --verb=FileSave --verb=FileClose $svg_file_name

최신 Inkscape에서는 파일을 닫는 대신 Inkscape를 종료해야 합니다.

inkscape --verb=EditSelectAll --verb=ObjectSetClipPath --verb=FileSave --verb=FileQuit $svg_file_name

관련 정보