web-dev-qa-db-ja.com

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

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

これどうやってするの?

17
Uri Herrera

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

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'
16
Matthias Brandt

コマンドラインから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拡張子を追加します。

25
Sergey

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


概要

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

スクリーンショット

enter image description here

スクリプト

#!/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) https://askubuntu.com/questions/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スクリプトの一般的なインストール手順は、 here にあります。次のコマンドは、必要なすべての依存関係をカバーする必要があります。

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キャンバスに多くの空きスペースがある場合、エクスポートオプションとして「描画」を選択することをお勧めします。

5
Glutanimate

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

免責事項:私はライブラリを書きました。それが誰かを助けることを願っています。

here をクリックします。

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

python exporter.py

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

2
Kevin Lee

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

inkscape --without-gui --export-width=1280 --export-png=`echo $1 |sed -e 's/svg$/png/'` $1
1