Command-Line
在命令行中將 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 中。這對我來說是不能接受的。
我發現了一種使用 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