VB.Net 2010で開発するアプリケーションに使用したいSVGアイコンがたくさんあります。SVGアイコンを処理するためのサポートがないため、これらのアイコンをPNGまたはICOに変換する必要があります。出力解像度。 rsvgconvert
という、Ubuntu用のコマンドラインツールを見つけました。 Windowsにもそのようなツールはありますか?
ImageMagick には、LinuxおよびWindows(およびその他)で使用できるコマンドラインツールがあります。変換ツールは便利に「変換」と呼ばれます。これが 使用方法のドキュメント です。
そして、ここで Windowsインストーラー を取得できます。
ImageMagickは、画像を含むバッチタスクだけにすぐに関連付けられるべきではありません。特にこの場合、ImageMagickはSVG変換のソリューションとしては不十分です。
コマンドラインで Inkscape を試してみてください:
inkscape in.svg --export-png=out.png
コマンドラインはそのままでは機能せず、さらに100個のファイルを変換する必要がありました。これが私がWindows 7で動作させる方法です。
インストール inkscape -ポータブルではありません!
すべてのsvgファイルを1つのフォルダーにコピーします。 「C:\ svgs \」があります:
次の行を含む_convert.bat
_ファイルを作成します。
_FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
_
(インストールの正しいフォルダーを指す):
管理者としてCMDを開きます!これを行うには、WINキーを押して「cmd」と入力し、「cmd.exe」を右クリックして「管理者として実行」を選択します。
「C:\ svgs \」に移動し、_convert.bat
_と入力します。すべてのsvgファイルはPNGに変換されます。
Windowsエクスプローラを使用して、変換されたPNGファイルを検索します。私のPCでは、次のフォルダーにありました:C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs
お役に立てば幸いです。
コマンドラインの解像度は私が確認できる範囲でしか設定できないので、結局 InkscapeBatchツール を使用しました。そこで、すべての画像を相対的に増やすようにDPIを設定できました。
正しい設定を指定する必要があります。そうしないと機能しません。これが私がしたことです:
「完了」をクリックした後、ツールバーの「バッチコンバータを開始...」ボタンを押す必要があります。
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]
InkscapeBatch Windowsでジョブを実行します。 Inkscape が必要です。
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時間取り組んだ後、私は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
}
カイの答え は近いですが、うまくいきませんでした。しかし、いくつかの微調整を行うことで、これは初めて完璧に機能しました。
convert.bat
_に変更します。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ファイルです変換済み)
convert.bat
_をダブルクリックして実行すると、変換の結果がエコー出力されます。新しいファイルを表示するためにWindowsフォルダーを更新する必要がある場合がありますが、それらはすべて元のSVGと同じ場所に作成されているはずです。
ここに記載されているほとんどの回答は、質問の目的のサイズの部分を無視しています。 SVGを「アップスケール」するときに、convert
を使用して満足のいく結果を得ることができませんでした。 inkscape
の方が優れており、背景の透明性も保持されます。
ユースケースに応じて、次のオプションのいずれかを使用します。
inscape in.svg -d 300 -e out.png
inscape in.svg -w 800 -e output.png
inscape in.svg -h 600 -e output.png
幅と高さの両方を指定するとnotでアスペクト比が保持されることに注意してください。
一度に多くのファイルを変換するには、(bash
または互換性のある)ユースケースに合わせて以下を調整します。
for f in *.svg; do
inkscape $f -d 300 -e ${f%.*}.png
done
何らかの理由で、imagemagickまたはinkscapeを動作させることができませんでした。このサイトを手動で使用しただけで、変換するファイルは12個しかありませんでした。 http://svgtopng.com/ うまくいきました。
以下は、指定されたディレクトリ内のすべてのsvgファイルをicoファイルに変換するImageMagickベースのソリューションです。
mogrify -format ico -density 1200 -background transparent -trim -resize 256x256 -gravity center -extent 256x256 -define icon:auto-resize *.svg
説明:
mogrify
:convert
と似ていますが、複数のファイルをバッチ処理できます。-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など)も含めます。ImageMagick はWindowsで使用でき、SVGとPNG、ICOの間で変換できます(特に)。出力ファイルのサイズやその他の属性を設定できます。
バッチを実行するために機能する単一のコマンドを見つけることができなかったので、ファイルリストを生成して一連のコマンドを作成することにより、それを機能させました。これらの手順は、すべてのバージョンのWindowsで機能します。すべての入力手順は引用を除外し、それらの間のすべてを含みます。
これを行うには、Inkscape、MS Excelまたは同等のスプレッドシートエディタとリストジェネレータが必要です。ここには素晴らしい小さなフリーウェアリストジェネレータがあります: https://www.portablefreeware.com/?id=1171
これを正しく行うと、次のようなファイル名ごとに1行が表示されます。| inkscape C:\ SVG\| Filename1.svg | --export-png = C:\ PNG\| Filename1.png |
誰かの生活が楽になることを願っています。ジェームズ