Recortar el dibujo SVG al tamaño del lienzo en la línea de comando

Recortar el dibujo SVG al tamaño del lienzo en la línea de comando

Tengo imágenes SVG producidas por PlantUML, que tiene algunas partes del dibujo fuera del lienzo. Hace que sea difícil utilizar este tipo de imágenes y necesito recortar el dibujo al tamaño de un lienzo. Como de todos modos produzco diagramas UML con script, sería muy eficiente realizar un recorte allí también.

Hasta ahora he probado dos cosas: a) cambiar el tamaño del lienzo para dibujar con Inkscape

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

Esto funciona bien, pero necesito recortar el dibujo al tamaño del lienzo y esta operación parece no estar disponible.

b) cambiar el tamaño con rsvg-convert

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

Esto recorta exactamente al tamaño deseado, pero el tamaño de la imagen aumenta ~10 veces ya que ahora hay algunas imágenes binarias incrustadas en SVG. Esto no es aceptable para mí.

Respuesta1

Encontré una manera poco elegante de hacerlo usando la propuesta de Orión. Suponiendo que $svg_file_namees una variable que contiene la ruta del archivo a una imagen SVG.

Primero necesitamos el ancho y alto de la imagen.

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

PlantUML produce el diagrama como un solo grupo (etiqueta <g>), coloquemos un rectángulo del tamaño de un lienzo sobre ese grupo

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

Ahora abra la imagen con Inkscape, seleccione todo y recorte el grupo con el rectángulo.

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

Con la última versión de Inkscape es necesario salir de Inkscape en lugar de cerrar el archivo.

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

información relacionada