У меня есть файл SVG, который имеет определенный размер 16x16. Когда я использую программу преобразования ImageMagick для преобразования ее в PNG, я получаю PNG размером 16x16 пикселей, который слишком мал:
convert test.svg test.png
Мне нужно указать размер пикселя выходного PNG. -size
Параметр, кажется, игнорируется, -scale
параметр масштабирует PNG после его преобразования в PNG. Лучший результат до сих пор я получал, используя -density
параметр:
convert -density 1200 test.svg test.png
Но я не удовлетворен, потому что я хочу указать размер вывода в пикселях без математических вычислений для расчета значения плотности. Поэтому я хочу сделать что-то вроде этого:
convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png
Так какой магический параметр я должен использовать здесь?
svg
imagemagick
png
kayahr
источник
источник
-size 1024x1024
, работает нормально, какая у вас версия imagemagick?-resize
просто растягивает преобразованное изображение с плохим качеством.convert -size 1024x1024 test.svg test.png
отлично работает с ImageMagick 7.0.7-0 Q16 (текущая версия в Chocolatey repo для Windows). Просто убедитесь, что оно-size
появляется перед входным именем файла, иначе изображение 16x16 будет увеличено, чтобы получить размытый результат.Ответы:
Мне не удалось получить хорошие результаты от ImageMagick в этом случае, но Inkscape отлично справляется с этой задачей на Linux и Windows:
Редактирование (май 2020 г.): пользователи Inkscape 1.0, обратите внимание, что аргументы командной строки изменились:
Вот результат масштабирования SVG 16x16 до PNG 200x200 с помощью этой команды:
Просто для справки, моя версия Inkscape (на Ubuntu 12.04):
а в Windows 7 это:
источник
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -e test.png -w 1024 -h 1024 test.svg
-background none
командной строки.Попробуйте svgexport :
svgexport - это простой кроссплатформенный инструмент командной строки, который я создал для экспорта файлов svg в jpg и png. Дополнительные параметры см. здесь . Чтобы установить svgexport, установите npm и запустите:
Изменить: Если вы обнаружите проблему с библиотекой, пожалуйста, отправьте ее на GitHub, спасибо!
источник
Это не идеально, но это делает работу.
В основном это увеличивает DPI достаточно высоко (просто используйте обоснованное / безопасное предположение), что изменение размера выполняется с адекватным качеством. Я пытался найти правильное решение для этого, но через некоторое время решил, что это достаточно хорошо для моей текущей потребности.
источник
-resize 200%
не работал, и мне пришлось указать размер в пикселях.-background none
командной строки. Чтобы сохранить соотношение изображения, вы также можете указать только одно измерение, например,-resize 200
для ширины или-resize x200
высоты. См. Imagemagick.org/script/command-line-processing.php#geometry для исчерпывающих параметров геометрии ImageMagick .Если вы используете MacOS X и у вас есть проблемы с конвертированием Imagemagick, вы можете попробовать переустановить его с помощью RSVG lib. Использование HomeBrew:
Убедитесь, что он делегирует правильно:
Это должно отобразить
rsvg
.источник
convert ic_comment_48px.svg -size 30x30 ic_comment_30px.png
и выходное изображение было 48 x 48. Убедитесь, что imagemagick делегирует rsvg, как вы объяснили.convert
конвертировал svg в png, но результаты были безнадежными; после переустановки они идеальны. Кроме того, преобразование значительно быстрее.invalid option: --with-librsvg
Кажется, что Inkscape не работает, если svg не работает
px
(например, см). Я получил пустое изображение. Может быть, это можно исправить, повернув dpi, но это было слишком хлопотно.Svgexport - это программа node.js, поэтому она обычно не используется.
Преобразование Imagemagick работает нормально с:
Если вы используете
-resize
, изображение нечеткое и файл намного больше.ЛУЧШИЙ
Он самый быстрый, имеет наименьшее количество зависимостей, а вывод примерно на 30% меньше, чем конвертирование. Установите librsvg2-bin, чтобы получить его. Похоже, что это не страница руководства, но вы можете ввести:
чтобы получить некоторую помощь. Простое это хорошо.
источник
-a
параметр должен использоваться с rsvg.brew install rsvg
на OSX устанавливается миллион вещей - GDK, OpenSSL, Python и т. Д.brew install librsvg
и команда преобразованияrsvg-convert
.rsvg-convert
в случае с Arch) дает лучшие и наиболее согласованные результаты при преобразовании сложных svgs в png. Выполните,optipng
чтобы уменьшить размер выходного файла.После выполнения шагов, описанных в ответе Хосе Албана , я смог заставить ImageMagick работать нормально, используя следующую команду:
Число 1536 исходит из приблизительной оценки плотности, см. Этот ответ для получения дополнительной информации.
источник
Чтобы изменить масштаб изображения,
-density
следует использовать эту опцию . Насколько я знаю, стандартная плотность составляет 72, а карты размером 1: 1. Если вы хотите, чтобы выходной png был вдвое больше исходного svg, установите плотность 72 * 2 = 144:источник
convert source.svg -density 144 target.png
не будет масштабировать изображение.convert -density 180 source.svg target.png
почему бы вам не попробовать в командной строке inkscape, это мой bat файл для преобразования всех svg в этом dir в png:
источник
Я пришел к этому сообщению - но я просто хотел сделать преобразование пакетным и быстрым без использования каких-либо параметров (из-за нескольких файлов с разными размерами).
Для меня требования были, вероятно, немного проще, чем для первоначального автора. (Хотел использовать SVG в MS PowerPoint, но это не позволяет)
источник
brew install librsvg
помощью команды преобразованияrsvg-convert
.В ImageMagick лучше получить SVG-рендеринг, если он использует Inkscape или RSVG с ImageMagick, чем его собственный внутренний рендеринг MSVG / XML. RSVG - это делегат, который должен быть установлен с ImageMagick. Если Inkscape установлен в системе, ImageMagick будет использовать его автоматически. Я использую Inkscape в ImageMagick ниже.
Нет «волшебного» параметра, который будет делать то, что вы хотите.
Но можно очень просто вычислить точную плотность, необходимую для визуализации вывода.
Вот небольшая кнопка 50x50 при рендеринге с плотностью 96 по умолчанию:
Предположим, мы хотим, чтобы на выходе было 500. На входе 50 при плотности по умолчанию 96 (более старые версии Inkscape могут использовать 92). Таким образом, вы можете вычислить необходимую плотность пропорционально отношениям размеров и плотностей.
В ImageMagick 7 вы можете выполнять вычисления в строке следующим образом:
источник
Одна вещь, которая только что укусила меня, была установка
-density
ПОСЛЕ имени входного файла. Это не сработало. Перемещение его к первому параметру в convert (прежде всего) заставило его работать (для меня, YMMV и т. Д.).источник
Для простого преобразования SVG в PNG я обнаружил, что cairosvg ( https://cairosvg.org/ ) работает лучше, чем ImageMagick. Шаги для установки и запуска всех файлов SVG в вашем каталоге.
Откройте оболочку python в каталоге, содержащем ваши файлы .svg и запустите:
Это также гарантирует, что вы не перезапишите исходные файлы .svg, но сохраните то же имя. Затем вы можете переместить все ваши файлы .png в другой каталог с помощью:
источник
cairosvg
на Ubuntu-19.04 мне сделали работу.Без librsvg вы можете получить черное изображение в формате png / jpeg. Мы должны установить
librsvg
вconvert
svg файл с помощью imagemagick.Ubuntu
MacOS
источник
Я решил эту проблему путем изменения
width
иheight
атрибутов<svg>
тега , чтобы соответствовать моему предназначенному размеру вывода , а затем преобразовать его с помощью ImageMagick. Работает как шарм.Вот мой код Python, функция, которая будет возвращать содержимое файла JPG:
источник
Лучший ответ от @ 808sound не сработал для меня. Я хотел изменить размер
и получил
Поэтому вместо этого я открыл Inkscape, затем пошел
File
,Export as PNG file
и появилось окно с графическим интерфейсом, которое позволило мне установить точные размеры, которые мне нужны.Версия на
Ubuntu 16.04 Linux
:Inkscape 0.91 (September 2016)
( Кстати, это изображение из пакетов ресурсов Kenney.nl )
источник
На macOS с использованием brew, использование librsvg напрямую работает
Многие варианты доступны через
rsvg-convert --help
источник
В Linux с Inkscape 1.0 для конвертации из SVG в PNG необходимо использовать
не
источник