在命令列中將 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

這確實會裁剪到所需的大小,但圖像大小會增加約 10 倍,因為現在有一些二進位圖像嵌入到 SVG 中。這對我來說是不能接受的。

答案1

我使用 Orion 的提案找到了不優雅的方法。假設$svg_file_name是一個包含 SVG 影像檔案路徑的變數。

首先我們需要圖像的寬度和高度

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

相關內容