#php #image #svg
#php #изображение #svg
Вопрос:
Код на PHP для преобразования SVG в другие форматы изображений и наоборот??
Ответ №1:
Ну, вы, вероятно, захотите использовать функции ImageMagick или GD. Но имейте в виду, что вы не можете конвертировать из PNG / JPEG / BMP в SVG, это улица с односторонним движением.
Редактировать: Разработка
Преобразование SVG (векторного) изображения в PNG (растровое) изображение тривиально. ImageMagick может сделать это наверняка, и я совершенно уверен, что GD тоже должен уметь. Если нет, то существуют также привязки PHP для rsvg.
Преобразование PNG (bitmap) в SVG (vector), с другой стороны, представляет собой целую проблему. Суть проблемы заключается в том, что растровое изображение попросту содержит меньше информации, чем векторное изображение: информация о формах, линиях и структуре, в частности, сглаживается до размеров пикселя и безвозвратно теряется. В некоторых случаях эта информация может быть восстановлена, но фактически никогда не извлекается или не обнаруживается заново.
Векторизация — это просто метод создания нового векторного изображения на основе растрового изображения, при котором компьютер пытается обнаружить линии и формы. Эта проблема далека от тривиальной, и процесс, безусловно, не идеален и даже не надежен в автоматизированных условиях.
Только Джон Скит может конвертировать PNG в SVG.
Переиздание: Автотрейсинг и личный опыт
Некоторое время назад я действительно проделал некоторую работу по трассировке растрового изображения для создания прототипа небольшого веб-приложения (найдите его здесь, MNSFW, требуется FFx / Safari / Opera). Создание вектора было выполнено с помощью potrace для многократного трассирования черно-белого изображения с пороговым значением для выделения элементов и последующего восстановления изображения вручную. Это был изнурительный процесс, но в то время я был без работы, и мне нечем было заняться.
Суть в том, что автоматическая трассировка растровых изображений для получения векторных изображений в лучшем случае случайна, а для надежного получения хороших результатов требуется
- Хорошее исходное изображение
- Много усилий
Комментарии:
1. Хммм, совсем нет способа? конвертировать из любого изображения в SVG-карты??
2. @PhpSeeker: Обновил мой ответ некоторыми уточнениями.
3. @gpvos Да, хороший момент, вы можете хранить растровое изображение внутри SVG. Но, конечно, вопрос, который приходит на ум в этот момент, был бы «почему?»…
4. Но затем вы можете выполнять дополнительные действия с PNG, такие как поворот, масштабирование и перекос.
5. Движок, который inkscape использует для трассировки растровых изображений, называется potrace, и доступ к нему на PHP должен быть довольно простым, поскольку это приложение командной строки: potrace.sourceforge.net
Ответ №2:
Несколько вариантов
-
внедрите изображение в качестве базы данных. Технически это не преобразование, но множество онлайн-конвертеров работают именно так.
-
преобразуйте растровое изображение в SVG попиксельно. Это не будет масштабируемым, и размер файла будет огромным, так что это тоже не оптимально.
-
Вы взаимодействуете с автоматической трассировкой (через
system
) для анализа изображений, которые вы хотите преобразовать, чтобы получить приблизительное. К форматам ввода относятся BMP, TGA, PNM, PPM, PGM, PBM и те, которые поддерживаются ImageMagick. Форматами экспорта являются Postscript, svg, xfig, swf, pstoedit, emf, dxf, cgm, mif, p2e и sk. Автоматическая трассировка — это FOSS.
Однако, если вы выберете 3, не ожидайте, что результат после этого будет слишком похож на ввод. Как уже указывали другие, вы потеряете детали в процессе преобразования.
Комментарии:
1. 1: Тогда зачем использовать SVG? 2: Нет, этого не произойдет. Это будет не более масштабируемо, чем растровый файл. На самом деле, во всяком случае, это будет менее масштабируемо, потому что предотвращает интерполяцию, которая обычно происходит, делая подход полностью бессмысленным во всех мыслимых способах .
2. @Уилл 1. это был не вопрос, 2. ты попал в точку. Я исправил эту часть. Я также добавил другой возможный подход, поэтому, пожалуйста, рассмотрите возможность удаления вашего DV прямо сейчас.
3. Моя точка зрения по отношению ко 2 остается в силе, но в свете пункта 3 я отменяю DV.
4. @Will спасибо, и я согласен, что пункты 1 и 2 невыполнимы, но, в общем, это возможно. @phpseeker всегда пожалуйста.
Ответ №3:
Для этого преобразования вам необходимо установить ImageMagick и potrace. potrace может конвертировать pbm / pgm / ppm / bmp в svg. Итак, сначала нам нужно преобразовать png / jpg в pbm / pgm /ppm / bmp с помощью imagemagick. Затем мы преобразуем его в svg с помощью potrace через командную строку.