アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

[Magick.NET]同じsvgデータから複数サイズpngを出力する

Androidだとhdpi、xhdpi、xxhdpi、xxxhdpi
UWPだとScale 100、125、150、200、400

同じデータから一気にpngに出力したい!!
って時が多くあったので作りましょう。

Androidはsvg1個あれば大丈夫になったというのにUWPと来たら時代遅れなんだから…

先に言っておくと成果物はこちら。
以下はMagick.NETを使う際にハマった点などを交えてMagick.NETの使い方紹介になります。
github.com

ダウンロード

Nugetから落としますQ16のOSに合わせたものをDLしてください。

準備

Debugとか書いてある右にAnyCPUとか書いてあると思うので先ほどと同じようにOSに合わせて構成マネージャから切り替えてください。
ここでちゃんとやらないと実行時エラーになります。ハマりました。

使う

// 読み込む設定をします。
var magicSettings = new ImageMagick.MagickReadSettings();

// [罠]ここでdpiを指定します。指定しないと画質が荒くなります。1000としたらInkscapeで出力した時よりも綺麗になりました。
magicSettings.Density = new ImageMagick.Density(dpi);

// [罠]ここで背景色を透明にしないと透明部分が全部真っ白になります。
magicSettings.BackgroundColor = new ImageMagick.MagickColor("#00000000");


// さて、いよいよ読み込みです。
using (var magickImage = new ImageMagick.MagickImage(path, magicSettings))
{

    // 出力後のサイズを指定します。
    magickImage.Scale(width, height);

    // 読み込みと出力フォーマットが異なるならここで指定します。
    magickImage.Format = ImageMagick.MagickFormat.Png;
    
    // 変わらなっかたが念のためQualityを100にしておきました。
    magickImage.Quality = 100;

    // 出力
    magickImage.Write(outPath);
}

こんな感じで使います。
ハマって結構時間かかってしまいました。