web-dev-qa-db-ja.com

SVG画像を目的のサイズのPNGまたはICOにバッチ変換する

VB.Net 2010で開発するアプリケーションに使用したいSVGアイコンがたくさんあります。SVGアイコンを処理するためのサポートがないため、これらのアイコンをPNGまたはICOに変換する必要があります。出力解像度。 rsvgconvertという、Ubuntu用のコマンドラインツールを見つけました。 Windowsにもそのようなツールはありますか?

27
Kushal

ImageMagick には、LinuxおよびWindows(およびその他)で使用できるコマンドラインツールがあります。変換ツールは便利に「変換」と呼ばれます。これが 使用方法のドキュメント です。

そして、ここで Windowsインストーラー を取得できます。

12
Mat

ImageMagickは、画像を含むバッチタスクだけにすぐに関連付けられるべきではありません。特にこの場合、ImageMagickはSVG変換のソリューションとしては不十分です。

コマンドラインで Inkscape を試してみてください:

inkscape in.svg --export-png=out.png

25
zetah

コマンドラインはそのままでは機能せず、さらに100個のファイルを変換する必要がありました。これが私がWindows 7で動作させる方法です。

  1. インストール inkscape -ポータブルではありません!

  2. すべてのsvgファイルを1つのフォルダーにコピーします。 「C:\ svgs \」があります:

  3. 次の行を含む_convert.bat_ファイルを作成します。

    _FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
    _

    (インストールの正しいフォルダーを指す):

  4. 管理者としてCMDを開きます!これを行うには、WINキーを押して「cmd」と入力し、「cmd.exe」を右クリックして「管理者として実行」を選択します。

  5. 「C:\ svgs \」に移動し、_convert.bat_と入力します。すべてのsvgファイルはPNGに変換されます。

  6. Windowsエクスプローラを使用して、変換されたPNGファイルを検索します。私のPCでは、次のフォルダーにありました:C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

お役に立てば幸いです。


コマンドラインの解像度は私が確認できる範囲でしか設定できないので、結局 InkscapeBatchツール を使用しました。そこで、すべての画像を相対的に増やすようにDPIを設定できました。

正しい設定を指定する必要があります。そうしないと機能しません。これが私がしたことです:

enter image description here

enter image description here

「完了」をクリックした後、ツールバーの「バッチコンバータを開始...」ボタンを押す必要があります。

enter image description here

7
Kai Noack

SVGからPNGへの変換では、cairosvg( https://cairosvg.org/ )がImageMagickよりもパフォーマンスが良いことがわかりました。ディレクトリ内のすべてのファイルをインストールして実行する手順。

pip3 install cairosvg

.svgファイルを含むディレクトリでpython Shellを開き、実行します。

import os

for file in os.listdir('.'):
    name = file.split('.svg')[0]
    cairosvg.svg2png(url=name+'.svg',write_to=name+'.png') 

これにより、元の.svgファイルが上書きされなくなり、同じ名前が維持されます。次に、すべての.pngファイルを別のディレクトリに移動できます。

$ mv *.png [new directory]
4
edank

InkscapeBatch Windowsでジョブを実行します。 Inkscape が必要です。

3

Bash/Ubuntu for Windowsでは、SVGがあるフォルダーで以下を使用できます。ただし、ImageMagickは最初にラスタライズしてからサイズを変更するようで、奇妙なアーティファクトが発生します…

_find -name "*.svg" -exec convert {} -background none -density 300 -resize 256x256 -define icon:auto-resize -alpha remove -colors 256 {}.ico \;_

(別のスレッドから、リンクが失われた)うまく機能していると思われるInscapeベースのソリューションもここにあります:mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=( "${res[@]/#/temp/$f}" ); resm=( "${resm[@]/%/.png}" ); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp;

2
Arty2

これにほぼ2時間取り組んだ後、私はInkscapeに落ち着きました。多くの異なる解像度で多数のファイルをバッチ変換する必要があったので、Powershellスクリプトを作成しました。 106個のSVGを使用すると、コンピューターが約5秒間フリーズしたため、これを使用するときは注意してください。

# ENTER THE FULL PATH TO THE INKSCAPE EXECUTABLE
$inkscapeExe = "C:\Program Files\Inkscape\inkscape.exe"
# ENTER THE PATH TO THE FOLDER CONTAINING THE SVGs
$svgFolder = "C:\Images\SVG"
# ENTER THE DESIRED WIDTH
$width = 120
# ENTER THE DESIRED HEIGHT
$height = 120

$svgFiles = Get-ChildItem $svgFolder -Filter *.svg
foreach ($svgFile in $svgFiles)
{
    $inputParam  = $svgFile.FullName 
    $outputParam = "--export-png=" + $svgFile.FullName + "-" + $width + "x" + $height + ".png" 
    $widthParam  = "-w" + $width
    $heightParam = "-h" + $height

    & $inkscapeExe $inputParam $outputParam $widthParam $heightParam
}
1
Eugen Timm

カイの答え は近いですが、うまくいきませんでした。しかし、いくつかの微調整を行うことで、これは初めて完璧に機能しました。

  1. SVGを便利な場所にコピーする
  2. 同じフォルダーにテキストファイルを作成し、名前を_convert.bat_に変更します。
  3. お好みのテキスト/コードエディタで_convert.bat_を開き、次のように入力します。

FOR %%A IN (*.svg) DO "C:\Program Files\Inkscape\inkscape.exe" %%A --export-png=%%A.png

(_inkscape.exe_の場所は、PC上の実行可能プログラムの場所と一致する必要があります。また、_--export-png_の前の2番目は_%%A_です-これは、SVGファイルです変換済み)

  1. _convert.bat_をダブルクリックして実行すると、変換の結果がエコー出力されます。

新しいファイルを表示するためにWindowsフォルダーを更新する必要がある場合がありますが、それらはすべて元のSVGと同じ場所に作成されているはずです。

0
indextwo

ここに記載されているほとんどの回答は、質問の目的のサイズの部分を無視しています。 SVGを「アップスケール」するときに、convertを使用して満足のいく結果を得ることができませんでした。 inkscapeの方が優れており、背景の透明性も保持されます。

ユースケースに応じて、次のオプションのいずれかを使用します。

  1. 指定したDPIでエクスポート:inscape in.svg -d 300 -e out.png
  2. 指定した幅でエクスポート(アスペクト比を維持):inscape in.svg -w 800 -e output.png
  3. 指定した高さでエクスポート(アスペクト比を維持):inscape in.svg -h 600 -e output.png

幅と高さの両方を指定するとnotでアスペクト比が保持されることに注意してください。

一度に多くのファイルを変換するには、(bashまたは互換性のある)ユースケースに合わせて以下を調整します。

for f in *.svg; do
  inkscape $f -d 300 -e ${f%.*}.png
done
0
kynan

何らかの理由で、imagemagickまたはinkscapeを動作させることができませんでした。このサイトを手動で使用しただけで、変換するファイルは12個しかありませんでした。 http://svgtopng.com/ うまくいきました。

0
matt burns

以下は、指定されたディレクトリ内のすべてのsvgファイルをicoファイルに変換するImageMagickベースのソリューションです。

mogrify -format ico -density 1200 -background transparent -trim -resize 256x256 -gravity center -extent 256x256 -define icon:auto-resize *.svg

説明:

  • mogrifyconvertと似ていますが、複数のファイルをバッチ処理できます。
  • -format ico:ターゲットファイル形式。元のファイルを上書きする代わりに.icoファイルを作成します(mogrifyはデフォルトで行うように)。
  • -density 1200:ImageMagickがSVGをラスタライズするターゲットピクセルサイズを指定できないため(最初にデフォルトの密度でラスタライズしてからスケーリングします)、SVGを非常に高い解像度(1200dpi)でラスタライズします。画像がdownscaledから256x256にアップスケールされるのではなく、.
  • -background transparent:背景は透明としてレンダリングされます。
  • -trim:画像の周囲の既存の境界線を削除します。
  • -resize 256x256:縦横比を維持しながら、画像を拡大縮小して、長辺が256pxになるようにします。
  • -gravity center -extent 256x256:キャンバスを拡大し、短辺も256ピクセルになるようにします。既存の画像は中央揃えです。 ICOファイルのベースとして正方形の画像が必要なため、これが必要です。
  • -define icon:auto-resize:ICOファイルには、256x256画像だけでなく、推奨されるすべての縮小解像度(32x32など)も含めます。
0
Heinzi

ImageMagick はWindowsで使用でき、SVGとPNG、ICOの間で変換できます(特に)。出力ファイルのサイズやその他の属性を設定できます。

バッチを実行するために機能する単一のコマンドを見つけることができなかったので、ファイルリストを生成して一連のコマンドを作成することにより、それを機能させました。これらの手順は、すべてのバージョンのWindowsで機能します。すべての入力手順は引用を除外し、それらの間のすべてを含みます。

これを行うには、Inkscape、MS Excelまたは同等のスプレッドシートエディタとリストジェネレータが必要です。ここには素晴らしい小さなフリーウェアリストジェネレータがあります: https://www.portablefreeware.com/?id=1171

  • すべてのsvgファイルを1つのフォルダーにハードリンク、コピー、または移動します。
  • そのフォルダーのファイルリストを生成し、csvにエクスポートします。
  • Excelでcsvを開き、ファイル名列を除くすべての列を削除します。また、[パス]などの列見出しや下部の要約テキストも削除します。
  • ファイル名が2列目にない場合は、そこにカットアンドペーストします。
  • 最初の列の最初のセルに「inkscape」と入力し、その後にスペースと、svgファイルの末尾にバックスラッシュを含むフォルダーパスを入力します(例:「inkscape C:\ SVG \」)。次に、このセルをコピーし、ファイル名の前にあるその下のすべてのセルを選択して貼り付け、すべて同じテキストになるようにします。
  • 3番目の列で、最初のセルに--export-png =と入力し、その後に保存先のフォルダーを続けます。同じフォルダーを使用しました。構文を正しくするために、最初にスペースを追加し、残りのテキストをまとめてください(例: "--export-png = C:\ PNG \")。これを最初の列と同じようにすべての行にコピーして貼り付けます
  • 2番目の列全体をコピーして、4番目の列に貼り付けます。 4番目の列を選択した状態でCtrl + H(検索と置換)を押します。検索フィールドに「.svg」と入力し、置換フィールドに「.png」と入力して、[すべて置換]を選択します。

これを正しく行うと、次のようなファイル名ごとに1行が表示されます。| inkscape C:\ SVG\| Filename1.svg | --export-png = C:\ PNG\| Filename1.png |

  • 5番目の列の最初のセルに「= concatenate(a2、b2、c2、d2)」と入力します。これは、ヘッダー列が削除されていないことを前提としています。括弧内のセル番号は、現在の行番号と一致する必要があります。最初のファイル名がB2にある場合、上記の式は正確です。それ以外の場合は正しい、角かっこ内のセル名は最初のファイル名の行と一致します(例:a1、b1、c1 ...)
  • このセルをコピーして貼り付け、列1と3のようにその下にすべてを入力します。
  • 次に、5番目の列全体をコピーし、[形式を選択して貼り付け]> [値]を使用して、数式によって生成されたテキストを6番目の列に貼り付けます。この6列目はあなたのお金のショットです。 6番目の列全体をコピーし、メモ帳を開いてその最後の列を貼り付けます。これを正しく行うと、各svgファイルをpngに変換するコマンドラインが1つあります。
  • メモ帳ファイルをバッチファイルとしてInkscapeディレクトリに保存します。 [名前を付けて保存]ウィンドウが開いたら、[名前を付けて保存]タイプを「すべてのファイル」に変更し、.batファイルとして保存します(例:「C:\ Program Files\Inkscape\SVGBatch.bat」
  • あとは、そのフォルダに移動して、保存したバッチファイルをダブルクリックするだけです。コマンドプロンプトが開き、すべてのファイルが変換されます。

誰かの生活が楽になることを願っています。ジェームズ

0
James