144

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

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

port install imagemagick +rsvg

16 ответов16

208

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

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

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

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

89

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

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

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

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

37

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

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

$ convert picture.svg picture.png

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

27

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

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

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

13

Хорошо, я нашел простой способ сделать это на 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">

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

5

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

mogrify -format png *.svg

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

3

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

java -jar batik-rasterizer.jar FILES

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

3

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

svgexport input.svg output.png
2

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

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

phantomjs examples/rasterize.js Tiger.svg out.png
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
1

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

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

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

0

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

0

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

brew install imagemagick --with-librsvg

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

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

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

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

-1

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

wkhtmltoimage --zoom 2 foo.svg foo.png

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

-2

sips - скриптовая система обработки изображений. Никаких внешних двоичных файлов не требуется.

sips -s format png mypdf.pdf --out myimage.png

Вот скрипт, который я использую после сеанса снимков экрана.

PWD=`pwd`
IMAGES=`ls "$PWD"/*.tiff`
TARGET=png
for IMAGE in $IMAGES
do
  SOURCE="$IMAGE"
  DESTINATION=`echo "$SOURCE" | sed "s/tiff/$TARGET/g"`
  sips -s format "$TARGET" "$SOURCE" --out "$DESTINATION" &2>/dev/null
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .