Eu tenho um arquivo SVG que contém pelo menos uma imagem JPG / PNG incorporada. Quero extrair as imagens JPG / PNG desse arquivo SVG e salvá-las no disco.
Estou adicionando a inkscape
tag, pois é o programa que uso para editar arquivos SVG, mas também aceito soluções usando outras ferramentas.
xml.etree
biblioteca interna.Respostas:
Minha própria solução (ou ... solução alternativa):
XML Editor
( Shift+ Ctrl+ X)xlink:href
atributo, que conterá a imagem como dados: URIdata:
URI inteirodata:
URI em um navegador e salve-o a partir daí.Como alternativa, posso abrir o arquivo SVG em qualquer editor de texto, localizar o
data:
URI e copiá-lo a partir daí.Embora essa solução funcione, é meio complicado e eu adoraria aprender uma melhor.
fonte
Há uma solução melhor:
vá para
Extensions -> Images -> Extract Image...
lá, você pode salvar a imagem raster selecionada como um arquivo. No entanto, esta extensão funciona de maneira estranha e, de alguma forma, funciona bem devagar (mas perfeitamente bem).Outra observação: esta extensão é complicada e morre silenciosamente em várias imagens grandes. Além disso, com um grande número de imagens rasterizadas, ele pode elevar o uso da memória do inkscape para níveis horrendos (como 3 GB após apenas algumas imagens extraídas).
Como tenho cerca de 20 arquivos svg com cerca de 70 imagens raster cada, cada imagem com pelo menos 1 MB de tamanho, eu precisava de uma solução diferente. Após uma breve verificação usando a dica de Denilson Sá , criei o seguinte script php, que extrai imagens de arquivos svg:
Dessa forma, posso obter todas as imagens desejadas e o md5 me impede de obter imagens repetidas.
Aposto que deve haver outra maneira que seja muito mais simples, mas cabe aos desenvolvedores do inkscape fazê-lo melhor.
fonte
data:
URL por linha e não oferece suporte a novas linhas dentro do atributo href (o inkscape as adiciona para URLs de dados, e a especificação base64 exige que as linhas não devam ter mais de 76 caracteres ). Bom script para um hack rápido, mas não funciona com todos os tipos de SVG.Finalmente, anos depois, escrevi um script para extrair corretamente todas as imagens de um arquivo SVG, usando uma biblioteca XML adequada para analisar o código SVG.
http://bitbucket.org/denilsonsa/small_scripts/src/tip/extract_embedded_images_from_svg.py
Este script foi escrito para o Python 2.7, mas deve ser bastante fácil de converter para o Python 3. Melhor ainda, cerca de 50 linhas podem ser excluídas após a conversão para o Python 3.4, devido aos novos recursos introduzidos nessa versão.
fonte
cElementTree
é suposto ser mais rápido. Mas talvez algo como o Sax funcione melhor também.cElementTree
é provavelmente mais rápido. No entanto, no Python 3.3, ambos são iguais . Em algum momento eu provavelmente vou atualizar esse script para Python 3.Como outra solução alternativa, você pode salvar como PDF e abrir esse documento com o Inkscape.
Desmarque "incorporar imagens" e bingo, todos os pngs / jpegs serão expelidos para o diretório inicial.
Confuso, mas mais rápido do que brincando com os dados: URL.
fonte
I melhorar o php-script de @Johnny_Bit . A nova versão do script pode usar svg com novas linhas. Extrai várias imagens do arquivo svg e as salva em arquivos png externos. Os arquivos SVG e PNG estão no diretório 'svg', mas você pode alterá-lo na constante 'SVG_DIR'.
fonte
Abra seu arquivo no Inkscape e selecione o bitmap que deseja exportar. Clique em Arquivo-> Exportar Bitmap (Ctrl + Shift + E) e ele deverá exportar apenas o bitmap selecionado.
fonte