Saya memiliki file SVG yang berisi setidaknya satu gambar JPG / PNG tertanam di dalamnya. Saya ingin mengekstrak gambar JPG / PNG dari file SVG itu dan menyimpannya di disk.
Saya menambahkan inkscape
tag karena ini adalah program yang saya gunakan untuk mengedit file SVG, tetapi saya juga menerima solusi menggunakan alat lain.
xml.etree
perpustakaan bawaan.Jawaban:
Solusi saya sendiri (atau ... solusi):
XML Editor
( Shift+ Ctrl+ X)xlink:href
atribut, yang akan berisi gambar sebagai data: URIdata:
URIdata:
URI itu ke browser, dan simpan dari sana.Atau, saya dapat membuka file SVG di editor teks apa pun, menemukan
data:
URI dan menyalinnya dari sana.Meskipun solusi ini berhasil, agak rumit dan saya ingin belajar yang lebih baik.
sumber
Ada solusi yang lebih baik sebagai gantinya:
pergi ke
Extensions -> Images -> Extract Image...
, di sana Anda dapat menyimpan gambar raster yang dipilih sebagai file. Namun ekstensi ini bekerja aneh dan entah bagaimana bekerja agak lambat (tapi sangat baik).Catatan lain: ekstensi ini rumit dan mati secara diam-diam di berbagai gambar besar. Juga, dengan sejumlah besar gambar raster, ia dapat melonjak penggunaan memori inkscape ke tingkat yang mengerikan (seperti 3GB setelah hanya beberapa gambar diekstraksi).
Karena saya punya sekitar 20 file svg dengan masing-masing sekitar 70 gambar raster, masing-masing gambar berukuran setidaknya 1MB, saya membutuhkan solusi yang berbeda. Setelah pemeriksaan singkat menggunakan Denilson Sá tip saya membuat skrip php berikut, yang mengekstrak gambar dari file svg:
Dengan cara ini saya bisa mendapatkan semua gambar yang saya inginkan, dan md5 menyelamatkan saya dari mendapatkan gambar yang diulang.
Saya yakin pasti ada cara lain yang jauh lebih sederhana, tetapi terserah inkscape devs untuk melakukannya dengan lebih baik.
sumber
data:
URL per baris, dan tidak mendukung baris baru di dalam atribut href (inkscape menambahkannya untuk URL data, dan bahkan spesifikasi base64 mengamanatkan bahwa garis tidak boleh lebih dari 76 karakter ). Skrip yang bagus untuk peretasan cepat, tetapi tidak bekerja dengan semua jenis SVG.Akhirnya, bertahun-tahun kemudian, saya telah menulis sebuah skrip untuk mengekstrak semua gambar dengan benar dari file SVG, menggunakan pustaka XML yang tepat untuk mem-parsing kode SVG.
http://bitbucket.org/denilsonsa/small_scripts/src/tip/extract_embedded_images_from_svg.py
Skrip ini ditulis untuk Python 2.7 tetapi harus cukup mudah untuk dikonversi ke Python 3. Bahkan lebih baik, sekitar 50 baris dapat dihapus setelah konversi ke Python 3.4, karena fitur baru yang diperkenalkan dalam versi itu.
sumber
cElementTree
seharusnya lebih cepat. Tapi mungkin sesuatu seperti Sax bekerja lebih baik juga.cElementTree
mungkin lebih cepat. Namun, pada Python 3.3, keduanya sama . Pada titik tertentu, saya kemungkinan akan memperbarui skrip itu ke Python 3.Sebagai solusi lain, Anda dapat menyimpan sebagai PDF, lalu buka dokumen itu dengan Inkscape.
Hapus centang "embed images", dan bingo, semua pngs / jpegs akan dimuntahkan ke direktori home Anda.
Berantakan, tetapi lebih cepat dari pada bermain-main dengan data: URL.
sumber
Saya meningkatkan naskah-php dari @Johnny_Bit . Rilis skrip baru dapat menggunakan svg dengan baris baru. Ini mengekstrak beberapa gambar dari file svg dan menyimpannya dalam file png eksternal. File Svg dan png ada dalam direktori 'svg', tetapi Anda dapat mengubahnya dalam 'SVG_DIR' konstan.
sumber
Buka file Anda di Inkscape dan pilih bitmap yang ingin Anda ekspor. Klik File-> Ekspor Bitmap (Ctrl + Shift + E) dan itu harus mengekspor hanya bitmap yang dipilih.
sumber