2013-09-10 9 views
11

Я успешно преобразовал PNG на SVG с помощью следующей команды:ImageMagick PNG размера изображения SVG

convert Slide3.png Slide3_converted.svg 

Проблема заключается в результирующий файл является необычайное 380MB!

Я пробовал эту версию команды:

convert -size 2000x1200 Slide3.png Slide3_converted_smaller.svg 

Но никаких костей. Тот же размер.

+0

Вы забыли написать PNG размер файла. Png to svg - непростая задача, можете ли вы использовать другие преобразователи? http://en.wikipedia.org/wiki/Raster_to_vector http://en.wikipedia.org/wiki/Comparison_of_raster_to_vector_conversion_software – ViliusL

ответ

10

SVG - это формат векторного изображения, поэтому преобразование растрового изображения (jpg, png, gif и т. Д.) В svg может быть сложной задачей.

Я попытался преобразовать простое изображение: белый фон с красным кружком и синий квадрат с помощью:

convert input.png output.svg 

вот пример из файла SVG, созданный этой командой:

<?xml version="1.0" standalone="no"?> 
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> 
<svg width="800" height="600"> 
    <circle cx="0" cy="0" r="1" fill="white"/> 
    <circle cx="1" cy="0" r="1" fill="white"/> 
    ... 
    <circle cx="218" cy="151" r="1" fill="rgb(255,247,247)"/> 
    <circle cx="219" cy="151" r="1" fill="rgb(255,40,40)"/> 
    <circle cx="220" cy="151" r="1" fill="red"/> 
    <circle cx="221" cy="151" r="1" fill="rgb(255,127,127)"/> 
    <circle cx="222" cy="151" r="1" fill="white"/> 
    <circle cx="223" cy="151" r="1" fill="white"/> 
    ... 
    <circle cx="799" cy="599" r="1" fill="white"/> 
</svg> 

в основном ImageMagick создал круг радиуса 1px для каждого пикселя, покрасив его в правильный цвет. Начиная с 5KB png мой вывод был 22 МБ svg, это объясняет огромный размер файла, который вы получили.

Согласно ImageMagick документации (см here), это происходит потому, что "AutoTrace" (см here) библиотека отсутствует:

«Если "библиотека AutoTrace" не установлен и скомпилирован в IM, то генерируется вывод SVG - огромное количество одиночных пикселов кругов, генерирующих двоичный результат, , а не гладкий SVG, набросанный image. Такие изображения огромны путем сравнения, d часто берут очень длинное раз, чтобы отдать SVG render. "

как только вы установили библиотеку автоматической трассировки, вы можете попробовать что-то вроде этого:

convert autotrace:A.gif A_traced.png 
+0

Есть ли возможность просто [встраивать изображение в svg] (http://stackoverflow.com/ д/6249664/1888983)? Создание кругов кажется мне совсем наоборот. Даже векторизация, похоже, не должна быть стандартной. – jozxyqk

Смежные вопросы