Command-Line

在命令行中將 SVG 繪圖裁剪為畫布大小

  • December 3, 2015

我有 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

引用自:https://unix.stackexchange.com/questions/128300