Tengo un archivo SVG que contiene al menos una imagen JPG / PNG incrustada dentro. Quiero extraer las imágenes JPG / PNG de ese archivo SVG y guardarlas en el disco.
Estoy agregando la inkscape
etiqueta, ya que es el programa que uso para editar archivos SVG, pero también acepto soluciones con otras herramientas.
xml.etree
biblioteca incorporada .Respuestas:
Mi propia solución (o ... solución):
XML Editor
( Shift+ Ctrl+ X)xlink:href
atributo, que contendrá la imagen como datos: URIdata:
URI completodata:
URI en un navegador y guárdelo desde allí.Alternativamente, puedo abrir el archivo SVG en cualquier editor de texto, ubicar el
data:
URI y copiarlo desde allí.Aunque esta solución funciona, es un poco engorrosa y me encantaría aprender una mejor.
fuente
Hay una mejor solución en su lugar:
vaya a
Extensions -> Images -> Extract Image...
, allí puede guardar la imagen ráster seleccionada como un archivo. Sin embargo, esta extensión funciona de manera extraña y de alguna manera funciona bastante lento (pero perfectamente bien).Otra nota: esta extensión es engorrosa y muere en silencio en varias imágenes grandes. Además, con una gran cantidad de imágenes ráster, puede aumentar el uso de memoria de Inkscape a niveles horrendos (como 3GB después de solo un puñado de imágenes extraídas).
Debido a que tengo alrededor de 20 archivos svg con aproximadamente 70 imágenes ráster en cada uno, cada imagen de al menos 1 MB de tamaño, necesitaba una solución diferente. Después de una breve comprobación con el consejo de Denilson Sá , ideé el siguiente script php, que extrae imágenes de los archivos svg:
De esta forma puedo obtener todas las imágenes que quiero, y md5 me evita obtener imágenes repetidas.
Apuesto a que debe haber otra forma que sea mucho más simple, pero depende de los desarrolladores de Inkscape hacerlo mejor.
fuente
data:
URL por línea, y no admite nuevas líneas dentro del atributo href (inkscape las agrega para las URL de datos, y la especificación base64 incluso exige que las líneas no tengan más de 76 caracteres ). Buen script para un hack rápido, pero no funciona con todo tipo de SVG.Finalmente, años después, escribí un script para extraer correctamente todas las imágenes de un archivo SVG, usando una biblioteca XML adecuada para analizar el código SVG.
http://bitbucket.org/denilsonsa/small_scripts/src/tip/extract_embedded_images_from_svg.py
Este script está escrito para Python 2.7, pero debería ser bastante fácil de convertir a Python 3. Aún mejor, se pueden eliminar alrededor de 50 líneas después de la conversión a Python 3.4, debido a las nuevas características introducidas en esa versión.
fuente
cElementTree
se supone que es más rápido. Pero tal vez algo como Sax también funciona mejor.cElementTree
es probablemente más rápido. Sin embargo, en Python 3.3, ambos son lo mismo . En algún momento probablemente actualizaré ese script a Python 3.Como otra solución alternativa, puede guardar como PDF y luego abrir ese documento con Inkscape.
Desmarque "incrustar imágenes" y bingo, todos los png / jpegs se incluirán en su directorio de inicio.
Desordenado, pero más rápido que jugar con los datos: URL.
fuente
Mejoro el php-script de @Johnny_Bit . La nueva versión del script puede usar svg con nuevas líneas. Extrae múltiples imágenes del archivo svg y las guarda en archivos png externos. Los archivos SVG y PNG están en el directorio 'svg', pero puede cambiarlo en 'SVG_DIR' constante.
fuente
Abra su archivo en Inkscape y seleccione el mapa de bits que desea exportar. Haga clic en Archivo-> Exportar mapa de bits (Ctrl + Shift + E) y debería exportar solo el mapa de bits seleccionado.
fuente