SVGをPNGにバッチエクスポートする方法はありますか?


18

これらのSVGSがあり、それらをPNG画像にエクスポートしたいのですが、Inkscapeでそれらをエクスポートできますが、それは各ファイルを開いてそのファイルをPNGにエクスポートすることを意味します(数百個あります)。

これどうやってするの?

回答:


16

以前に受け入れられた答えに触発されて、私はこのワンライナーを思いつきました:

Inkscapeバージョン0.92.4以前の場合:

for file in *.svg; do inkscape $file -e ${file%svg}png; done

この方法では、スクリプトを呼び出す必要はありません。必要に応じて、現在のディレクトリ内のすべてのsvgをpngに変換するエイリアスを作成できます。

alias svgtopng='for file in *.svg; do inkscape $file -e ${file%svg}png; done'

Inkscapeバージョン1.0ベータ版以降:

for file in *.svg; do inkscape $file -o ${file%svg}png; done

この方法では、スクリプトを呼び出す必要はありません。必要に応じて、現在のディレクトリ内のすべてのsvgをpngに変換するエイリアスを作成できます。

alias svgtopng='for file in *.svg; do inkscape $file -o ${file%svg}png; done'

1
${file%svg}png素晴らしいトリックです!私はそれを見たことがありませんでした。
チェスター

これは、ファイル名にスペースが含まれていると機能しないと思います。
ジェノム

26

コマンドラインからInkscapeを使用できるようです:

`#{INKSCAPE_PATH} -z -f #{source_svg} -w #{width} -j -e #{dest_png}`

詳細

すべてのSVGファイルを処理する単純なbashスクリプトを作成できると思います。

#!/bin/sh

for file in *.svg
do
     /usr/bin/inkscape -z -f "${file}" -w 640 -e "${file}.png"
done

上記の例は、現在のディレクトリ内のすべての.svgファイルを変換し、出力ファイルに.png拡張子を追加します。


数百のSVGをエクスポートしようとしていますが、エクスポート値(dest)を設定して名前を保持するにはどうすればよいですか?これは少量でもうまくいくようだからです。
ウリエレーラ

@UriHerrera:答えを更新しました
セルゲイ

すべてのファイルは{file} .pngではなく{file} .svg.png形式で保存されますか?それを修正する方法は?また、オリジナルのSVGにそれはPNG(私はアイコンがパックに変換しようとしている)に変換されますときに消え右下に小さなショートカットアイコンを表示されます
東商

@Tosho現在、私は、Windows上だが、それはこのようなものでなければなりません:pastebin.com/TEDfvxPC
user31389

2
@Toshoすることもできます${file%svg}png。さらなる可能性については、こちらをご覧ください。
JJA

5

グラフィカルなNautilusスクリプト


概要

コマンドラインはバッチ変換に最適ですが、GUIの快適さを残したくない場合があります。それが、SVGファイルをPNG画像にバッチ変換するGUIベースのNautilusスクリプトをコーディングした理由です。カスタムアクション(Thunarなど)を備えた他のファイルマネージャーもサポートする必要があります。

スクリーンショット

ここに画像の説明を入力してください

脚本

#!/bin/bash

# NAME:         SVG2PNG
# VERSION:      0.1
# AUTHOR:       (c) 2014 Glutanimate (https://github.com/Glutanimate)
#
# DESCRIPTION:  Simple application to convert SVG files to PNG files based on DPI or resolution. 
#               Designed to work as a context menu script in file managers like Nautilus and Thunar.
#
# FEATURES:     - Converts SVG image file to PNG raster of a specific DPI or width
#               - SVG preview
#               - choose between converting the full SVG page or only the cropped image
#
# DEPENDENCIES: inkscape imagemagick yad
#               YAD (1) is an advanced for of Zenity with many improvements. It's not included in the
#               official Ubuntu repos yet (2) but can be installed from a webupd8 PPA (3)
#
# LICENSE:      MIT license (http://opensource.org/licenses/MIT)
#
# NOTICE:       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
#               INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
#               PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
#               LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
#               TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 
#               OR OTHER DEALINGS IN THE SOFTWARE.
#
#
# USAGE:        SVG2PNG image1.svg image2.svg [..]
#               I recommend installing this script as a context menu action for your file manager.
#               Instructions for Nautilus may be found on AskUbuntu (4).
#
# NOTES:        The script uses convert for previews because it's faster. For optimal results
#               the actual conversion is done with inkscape's command line interface.
#
# LINKS:        (1) https://code.google.com/p/yad/
#               (2) https://bugs.launchpad.net/ubuntu/+bug/796633
#               (3) https://launchpad.net/~webupd8team/+archive/y-ppa-manager
#               (4) /ubuntu/236414/how-can-i-install-a-nautilus-script

############## DIALOGS ###################

TITLE="SVG to PNG"
ICON="svg"

############## USGCHECKS #################

# checks if user selected an item

if [ $# -eq 0 ]
  then
      yad --title="$TITLE" \
          --image=dialog-error \
          --window-icon=dialog-error \
          --class="$WMCLASS" \
          --text="Error: no file selected" \
          --button="Ok":0
      echo "Error: no file selected"
      exit
fi

############### GLOBVAR ##################

SVGFILES="$@"
TEMPDIR=$(mktemp -d)
PREVIEWIMG="$TEMPDIR/svgpreview.png"

############### CLEANUP ##################

trap "rm -r $TEMPDIR" EXIT 

############## FUNCTIONS #################

converttosvg_dpi(){

echo "Converting based on DPI."

while [ $# -gt 0 ]; do

    echo "$# file(s) left to convert."
    SVGFILE="$1"
    FILESTEM="${SVGFILE%%.*}"
    PNGFILE="$FILESTEM".png
    inkscape "$SVGFILE" -z --export-dpi="$DPI" \
    --"$AREASETTING" --export-png="$PNGFILE"
    shift

done
echo "Done."

}

converttosvg_res(){

echo "Converting based on Width."

while [ $# -gt 0 ]; do

    echo "$# file(s) left to convert."
    SVGFILE="$1"
    FILESTEM="${SVGFILE%%.*}"
    PNGFILE="$FILESTEM".png
    inkscape "$SVGFILE" -z --export-width="$WIDTH" \
    --"$AREASETTING" --export-png="$PNGFILE"
    shift

done
echo "Done."

}

createpreview() {
convert -resize 128x "$1" "$PREVIEWIMG"
}

getsettings() {

SETTINGS=$(yad --window-icon "$ICON" --image "$PREVIEWIMG" --width 300 --height 200 --always-print-result \
--form --separator="|" --title="$TITLE" --text "Please choose the DPI or resolution to convert to." \
--field="DPI:NUM" 10[!80..600[!10]] --field="Width in px:NUM" 16[!16..4096[!16]] \
--field="Area:":CB "Drawing"\!"Page" \
--button="Convert based on DPI:2" --button="Convert based on Resolution:3" --button="gtk-cancel:1")

RET=$? # Exit code?

if [ "$RET" = 252 ] || [ "$RET" = 1 ]  # WM-Close or "Abort"
  then
      echo "Exiting..."
      exit
fi

DPI=$(printf %.0f $(cut -d "|" -f 1 <<<"$SETTINGS")) #round values
WIDTH=$(printf %.0f $(cut -d "|" -f 2 <<<"$SETTINGS"))
AREA=$(cut -d "|" -f 3 <<<"$SETTINGS")

case "$AREA" in

Drawing)
  AREASETTING="export-area-drawing"
  ;;

Page)
  AREASETTING="export-area-page"
  ;;

esac

echo "DPI set to $DPI"
echo "Width set to $WIDTH"
echo "Area set to $AREA"

}


################ MAIN ####################

createpreview "$1"
getsettings

case "$RET" in

2)
  echo 2
  converttosvg_dpi "$@"
  ;;

3)
  echo 3
  converttosvg_res "$@"
  ;;

esac

exit 0

この回答は常に更新しますが、最新バージョンのスクリプトについてはGithubリポジトリをご覧ください。

設置

すべてのNautilusスクリプトの一般的なインストール手順は、こちらにあります。次のコマンドは、必要なすべての依存関係をカバーする必要があります。

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install yad inkscape imagemagick

詳細については、上記のスクリプトヘッダーを参照してください。

使用法

スクリプトをインストールしたら、ファイルマネージャーのコンテキストメニューからスクリプトを呼び出すことができます。1つ以上のSVGファイルを選択して、コンテキストメニューの適切なエントリをクリックするだけです。GUIダイアログには、変換に関するいくつかのオプションが表示されます。

DPIまたは幅に基づいてSVGを変換できます。どちらの場合もアスペクト比は維持されます。変換ボタンをクリックする前に、選択したDPIまたは幅を必ず入力してください。

完全なSVGファイルをエクスポートするか、トリミングした図面のみをエクスポートするかを選択することもできます。SVGキャンバスに多くの空きスペースがある場合、エクスポートオプションとして「描画」を選択することをお勧めします。


2

より読みやすいスクリプト言語であるpythonを使用した、わ​​ずかに異なる代替ソリューションを次に示します。すべてのsvgを一括エクスポートできます。Android開発を行っており、1つのsvgから複数のpngを作成する必要がある場合に特に理想的です。

免責事項:libを作成しました。それが誰かを助けることを願っています。

こちらをクリックしてください

簡単に使用するには、ライブラリをフォルダーにダウンロードし、svgを同じフォルダーに入れてから実行します

python exporter.py

cdフォルダーに移動した後、コマンドライン/ターミナルで。より高度なオプションについては、READMEをご覧ください。


デイビッドに感謝します、私は答えを編集して詳細を提供しました!
ケビン・リー

1

すべてのファイルではなく、特定のSVGファイルのみをPNGに変換する必要がある場合、ファイル名の自動生成に使用sedできます。

inkscape --without-gui --export-width=1280 --export-png=`echo $1 |sed -e 's/svg$/png/'` $1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.