Приложение командной строки для преобразования SVG в PNG в Mac OS X

167

Существуют ли программы командной строки, которые могут конвертировать SVG в PNG, работающие в Mac OS X?

Изменить : Дилан B был хороший ответ с ImageMagick. Для справки: чтобы установить ImageMagick с поддержкой SVG в Mac OS X с помощью MacPorts, выполните

port install imagemagick +rsvg
Лорин Хохштайн
источник
2
Я нашел способ, если у вас есть Google Chrome ... и нет необходимости устанавливать какие-либо другие вещи: superuser.com/questions/134679/…
nopole
cairosvg.org работает на python3 и, похоже, не имеет проблем. pip3 install cairosvg
JayRizzo

Ответы:

234

Или без установки чего-либо:

qlmanage -t -s 1000 -o . picture.svg 

Он создаст файл picture.svg.png шириной 1000 пикселей.

Я проверил это только на OS X 10.6.3.

TST
источник
38
К сожалению, это обрезает изображения в квадрат.
Мартин Питерс
7
Ах, qlmanage -tдает эскиз, используемый Quick Look (в Finder и т. Д.). Умная идея К сожалению, эти миниатюры могут содержать ошибки, особенно если в них есть текст.
ShreevatsaR
7
Это производит изображения с файлом SVG в 1-м квадранте. Не обрезать автоматически. Попытка конвертировать файлы из существительного проекта - желаю, чтобы это сработало.
Алекс Кук
7
Это решение не учитывает прозрачность. Инструмент rsvg-convertв ответе @ ahti уже работал для меня.
BenR
3
Размещение параметров ширины и высоты после того, как -sопция не сработала для меня. Все еще обрезает его на квадрат. Очень расстраивает!
Эрик ван дер
107

Я обнаружил, что для меня лучший инструмент для работы rsvg-convert.

Его можно найти в brew with brew install librsvgи используется так:

rsvg-convert -h 32 icon.svg > icon-32.png

(В этом примере создается PNG с высотой 32 пикселя. Ширина определяется автоматически.

Ахти
источник
Это единственный, который работал для меня на Mavericks и commons.wikimedia.org/wiki/…
Арон Ахмадиа
На самом деле это сработало, в то время как ImageMagick convertвыдавал ошибки и не смог скрыть сложный SVG
Brice,
7
На сегодняшний день это лучшее решение, которое я нашел для OS X Yosemite +1!
Грег Мартин
Это странно для некоторых моих SVG. qlmanageОтвет работал для всех из них , но положить белый фон, который я не хочу.
Судо
1
При rsvg-convertэтом полученный .png имел правильные размеры, но изображение получилось черным, а не исходными цветами. С qlmanageизображения обрезается до квадрата. Все еще в поисках решения :-(
Эрик ван дер
43

ImageMagick - чрезвычайно универсальный редактор изображений для командной строки, который, вероятно, конкурировал бы с Photoshop, если бы у него был, вы знаете, графический интерфейс. Но кому это нужно в любом случае. :П

Что-то вроде следующего преобразовало бы .svg в .png после установки:

$ convert picture.svg picture.png

Оригинал .svg не удаляется.

Джесси
источник
Это вроде имеет графический интерфейс, в display.
Игнасио Васкес-Абрамс
1
Когда я установил ImageMagick с Fink, я не смог конвертировать svg в png - были некоторые ошибки. Оказалось, что мне нужно было также установить librsvg2-bin.
TST
Если librsvg2-bin не установлен (как в OS X), это не удастся. Не удалось найти способ установить его на OS X.
Джон Шихан
3
Это не будет хорошо работать, если вы хотите изменить размер SVG, поскольку он генерирует размытые изображения.
Бехранг
3
Он также не конвертирует все файлы SVG правильно; по крайней мере, qlmanage получил все части изображения.
Йохан
28

Inkscape с его Commandline-интерфейсом дает лучшие результаты для меня:

/Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png output.png -w 1024 -h 768 input.svg

Хорошо, что вы можете указать точный размер пикселя полученного изображения, не прибегая к плотности.

СЕБ
источник
это работает для меня! - У меня есть больший SVG, созданный с помощью Inkscape
matheszabi
Это единственный метод, который правильно отображал мои рукописные svg
Griffin
Конвертировать не создает хорошие файлы PNG из SVG. Использование Inkscape - лучший способ, который я нашел до сих пор.
ol_v_er
Это работает для меня, но создает очень размытые файлы.
Марчин
3
У меня была проблема с поиском файлов, поэтому запустите его какinkscape $(pwd)/logo.svg --export-png $(pwd)/logo.png
Андрей
16

Хорошо, я нашел простой способ сделать это на Mac, если у вас есть Google Chrome.

В одном предложении это чтобы увидеть svgизображение на веб-странице (должно быть в htmlфайле), щелкните правой кнопкой мыши на изображении и выберите «Копировать изображение» и вставьте его в приложение «Просмотр».

шаги:

  1. Загрузите или поместите svgфайл на жесткий диск, скажем,somefile.svg
  2. Теперь, в той же папке, просто создайте html-файл tmp.html, содержащий эту строку:<img src="somefile.svg">
  3. Теперь откройте этот HTML-файл в Google Chrome
  4. Вы должны увидеть изображение. Теперь просто щелкните правой кнопкой мыши на изображение и выберите «Копировать изображение»
  5. Перейдите в приложение Mac Preview и выберите "File -> New from Clipboard"
  6. Теперь File -> Saveфайл и у вас есть pngфайл. (или другие типы файлов).

Это проверено на текущем Chrome (версия 48.0) на Mac OS X El Capitan.

Обновление : я не уверен, связано ли это с некоторыми ограничениями, введенными Google Chrome. Я просто пробую SVG-файл, используя Chrome 58.0, и получаю крошечное изображение из описанного выше метода. Если вы видите этот случай, вы также можете использовать

<img src="somefile.svg" style="height: 82vh; margin-top: 9vh; margin-left: 9vh">

и у вас будет достаточно хорошее изображение на экране, чтобы вы могли сделать снимок экрана - например, с помощью CmdShift4или CmdShift3на Mac. Убедитесь, что вы изменили размер окна Chrome до максимально допустимого на экране.

nopole
источник
Умное решение!
Ману
1
Это на самом деле дает лучшие результаты для меня, так как он отображает точно так же, как браузер.
Джейсон Хаслам
полученное изображение было очень плохим для меня
Майкл
Гениально :) но для очень больших SVG, разрешение результирующего изображения слишком низкое, как упоминал @Michael.
Вальдериус
5

Если вы хотите сделать много сразу, вы можете:

mogrify -format png *.svg

Есть варианты изменения размера и т. Д. На лету тоже.

DefenestrationDay
источник
3
mogrifyтакже является частью ImageMagick.
ShreevatsaR
Работает отлично, но зверски медленно.
Meekohi
-1? Кто-то думает, что это не полезно? В чем ошибка?
DefenestrationDay
2
Я не из тех, кто проголосовал против, но стоит отметить, что ImageMagick тупо преобразует SVG в растровое изображение произвольного размера перед изменением размера, что приводит к размытым выводам.
Дэ
4

Попробуйте Apache Batik .

java -jar batik-rasterizer.jar FILES

Он также поддерживает пакетное преобразование и имеет много других полезных опций.

Behrang
источник
4

Я сделал svgexport, используя для этого node / npm, он кроссплатформенный и может быть простым:

svgexport input.svg output.png
Али Шакиба
источник
Это был самый простой в использовании и запоминании. Кроме того, единственный, который дал правильный результат в моем случае.
Марко Грешак
Результирующее разрешение не было большим для меня.
Майкл
3

Вы также можете использовать phantomjs для рендеринга SVG. Преимущество в том, что он отображает его так же, как браузер, так как это, по сути, безголовый WebKit.

После того, как вы загрузите его, вам понадобится phantomjs (двоичный файл) и файл rasterizer.js из папки с примерами.

phantomjs examples/rasterize.js Tiger.svg out.png
Stofke
источник
1
Для справки, это может быть установлено с brew cask install phantomjs. В моей установке папка примеров была расположена в пути /usr/local/Caskroom/phantomjs/2.1.1/phantomjs-2.1.1-macosx/examples/.
Вальдериус
2

Это то, что я использовал:

brew install imagemagick --with-librsvg

Затем выполните следующие команды:

find . -type f -name "*.svg" -exec bash -c 'convert $0 $0.png' {} \; rename 's/svg\.png/png/' *

Надеюсь, это поможет.

Алан Донг
источник
1

Я использую эту команду на моем Linux. Это должно работать и для вас.

mogrify +antialias -density 2000 -verbose -format png *.svg

Я узнал, что без аргумента «-density» растровое изображение будет очень пикселизированным. Измените значение -density в соответствии с вашими потребностями.

BersekerBernhard
источник
2
Даже с плотностью преобразование не генерирует такое же четкое изображение, как векторное изображение. Попробуйте вместо этого Apache Batik.
Бехранг
1

Команда преобразования в ImageMagick, использующая некоторые другие параметры, сделала это для меня. Вот мое пакетное решение Bash-скрипта, которое разделяет задачу между несколькими процессами, чтобы использовать все ваши ядра! Изменить по необходимости.

batchConvertToSVG.sh (принимает число процессов в качестве аргумента):

end=$(( $1 - 1 ))
for i in `seq 0 $end`;
        do
            echo Spawning helper $i of $end
                ./convertToSvgHelper.sh $i $1 &
        done 

convertToSvgHelper.sh:

n=$1
for file in ./*.svg; do
   filename=${file%.svg}
   echo converting file named $filename
   test $n -eq 0 && convert -format png -resize 74 -background transparent -density 600 $file $filename.png
   n=$((n+1))
   n=$((n%$2))
done
Судо
источник
0

Как прокомментировал ранее ImageMagick делает свое дело. Я просто хотел добавить пункт для GraphicsMagick , старого форка ImageMagick, в котором есть некоторые улучшения (и гораздо меньше раздувания зависимостей при установке через fink).


источник
0

Вы можете выполнить пакетное преобразование всей папки файлов SVG в формат PNG. Я использовал интерфейс командной строки Inkscape для создания png-файлов шириной 80 пикселей.

find ~/desktop/toconvert '*.svg' -exec /Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -w 80 -e "{}".png "{}" \;

png будет сохранен с оригинальным именем * .png

Джеймс Мэтью Маджетт
источник
0

Еще один способ без установки чего-либо. Не в командной строке, хотя.

  1. Откройте файл .svg в Safari.
  2. Нажмите alt-command-i, чтобы открыть инспектор.
  3. Щелкните правой кнопкой мыши по <svg>тегу, выберите «Сделать снимок экрана». (Обратите внимание, что вы не должны увеличивать изображение.)

PS Чтобы увеличить изображение .svg, если оно слишком маленькое, попробуйте открыть файл .svg в текстовом редакторе и добавить 0к каждому числу, кроме мета-атрибута. Это может быть сделано с помощью глобальной подстановки регулярных выражений из (\d+)в $10, где $1, например, указывается место обратной ссылки.

Хаотянь Ян
источник
Вы, вероятно, должны упомянуть, что это почти то же самое, что  ответ 太極 者 無極 而 生 .
Скотт
-1

wkhtmltoimage (из проекта wkhtmltopdf) сделал это преобразование хорошо:

wkhtmltoimage --zoom 2 foo.svg foo.png

ImageMagick отображает CJK-символ как пустой на моем Mac.

georgexsh
источник
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - Из обзора
Блэквуд
@ Blackwood хорошо, обновлено.
georgexsh