回答:
以前に受け入れられた答えに触発されて、私はこのワンライナーを思いつきました:
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'
コマンドラインから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拡張子を追加します。
概要
コマンドラインはバッチ変換に最適ですが、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キャンバスに多くの空きスペースがある場合、エクスポートオプションとして「描画」を選択することをお勧めします。
より読みやすいスクリプト言語であるpythonを使用した、わずかに異なる代替ソリューションを次に示します。すべてのsvgを一括エクスポートできます。Android開発を行っており、1つのsvgから複数のpngを作成する必要がある場合に特に理想的です。
免責事項:libを作成しました。それが誰かを助けることを願っています。
簡単に使用するには、ライブラリをフォルダーにダウンロードし、svgを同じフォルダーに入れてから実行します
python exporter.py
cd
フォルダーに移動した後、コマンドライン/ターミナルで。より高度なオプションについては、READMEをご覧ください。
すべてのファイルではなく、特定のSVGファイルのみをPNGに変換する必要がある場合、ファイル名の自動生成に使用sed
できます。
inkscape --without-gui --export-width=1280 --export-png=`echo $1 |sed -e 's/svg$/png/'` $1
${file%svg}png
素晴らしいトリックです!私はそれを見たことがありませんでした。