У меня есть файл SVG, который содержит по крайней мере одно встроенное изображение JPG / PNG внутри. Я хочу извлечь изображения JPG / PNG из этого файла SVG и сохранить их на диске.
Я добавляю inkscape
тег, так как это программа, которую я использую для редактирования файлов SVG, но я также принимаю решения, используя другие инструменты.
xml.etree
библиотеку.Ответы:
Мое собственное решение (или ... обходной путь):
XML Editor
( Shift+ Ctrl+ X)xlink:href
атрибут, который будет содержать изображение в качестве данных: URIdata:
URIdata:
URI в браузер и сохраните его оттуда.Кроме того, я могу открыть файл SVG в любом текстовом редакторе, найти
data:
URI и скопировать его оттуда.Хотя это решение работает, оно довольно громоздко, и я хотел бы узнать лучшее.
источник
Вместо этого есть лучшее решение:
перейдите к
Extensions -> Images -> Extract Image...
, там вы можете сохранить выбранное растровое изображение в виде файла. Однако это расширение работает странно и как-то работает довольно медленно (но совершенно хорошо).Еще одно замечание: это расширение громоздко и тихо умирает на разных больших изображениях. Кроме того, с большим количеством растровых изображений это может увеличить использование памяти inkscape до ужасных уровней (например, 3 ГБ после нескольких извлеченных изображений).
Поскольку у меня есть около 20 SVG-файлов с около 70 растровыми изображениями в каждом, каждое размером не менее 1 МБ, мне нужно было другое решение. После небольшой проверки с помощью Denilson S tip я разработал следующий php-скрипт, который извлекает изображения из файлов SVG:
Таким образом, я могу получить все нужные изображения, а md5 избавляет меня от повторных изображений.
Могу поспорить, что должен быть другой способ, который намного проще, но разработчики Inkscape должны сделать это лучше.
источник
data:
URL-адрес на строку и не поддерживает переводы строки в атрибуте href (inkscape добавляет их для URL-адресов данных, а спецификация base64 даже предписывает, что строки не должны быть длиннее 76 символов ). Хороший скрипт для быстрого взлома, но он не работает со всеми видами SVG.Наконец, спустя годы, я написал скрипт для правильного извлечения всех изображений из файла SVG, используя правильную библиотеку XML для анализа кода SVG.
http://bitbucket.org/denilsonsa/small_scripts/src/tip/extract_embedded_images_from_svg.py
Этот сценарий написан для Python 2.7, но его довольно легко конвертировать в Python 3. Более того, после преобразования в Python 3.4 можно удалить около 50 строк благодаря новым функциям, появившимся в этой версии.
источник
cElementTree
должен быть быстрее. Но, может быть, что-то вроде Sax тоже работает лучше.cElementTree
скорее всего быстрее. Тем не менее, в Python 3.3 оба будут одинаковыми . В какой-то момент я, скорее всего, обновлю этот скрипт до Python 3.В качестве еще одного обходного пути, вы можете сохранить как PDF, а затем открыть этот документ с помощью Inkscape.
Снимите флажок «вставлять изображения» и, бинго, все pngs / jpegs будут выброшены в ваш домашний каталог.
Грязно, но быстрее, чем дурачиться с данными: URL.
источник
Я улучшаю php-скрипт @Johnny_Bit . Новая версия скрипта может использовать svg с новыми строками. Он извлекает несколько изображений из SVG-файла и сохраняет их во внешних PNG-файлах. Файлы svg и png находятся в каталоге 'svg', но вы можете изменить его в константе 'SVG_DIR'.
источник
Откройте свой файл в Inkscape и выберите растровое изображение, которое вы хотите экспортировать. Нажмите File-> Export Bitmap (Ctrl + Shift + E), и он должен экспортировать только выбранное растровое изображение.
источник