より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

PngをSvgに変換するプログラムは書けない?

svgpngに変換するプログラムはすぐに検索でき、書けそうだとわかりました。

github.com

Convert SVG to PNG using NuGet package Svg | C# Online Compiler | .NET Fiddle

ですが、逆にpngsvgに変換するプログラムについてはわかりませんでした。「Convert png to svg」などとキーワードを入れて検索をしていたのですが、無料のWebサービスなどを活用するしかなさそうです。

social.msdn.microsoft.com

と、諦めていたのですが、Magick.NETがありました。

github.com

f:id:rimever:20190923180739p:plain

Q16とQ8がありますが、Q16は16ビット画像を劣化させずに扱えるようです。その分、負荷がかかります。

Magick.NETはpngからsvgだけでなく、様々な画像ファイルの変換を扱ったライブラリです。

using ImageMagick;

namespace ConsolePngToSvg
{
    class Program
    {
        static void Main(string[] args)
        {
            var path = "example.png";
            var convertPath = "example.svg";
            using (MagickImage img = new MagickImage(path) {Format = MagickFormat.Svg})
            {
                img.Write(convertPath);
            }
        }
    }
}

参考サイト

wiki.dobon.net

おまけ

素人目にsvgにしとけばファイルは軽くなると思ったのですが、そういうものではないんですね。

適当なpng画像をsvgに変換して見ましたが、逆にファイルサイズが大きくなってしまいました。

f:id:rimever:20190923181442p:plain
png 2841KB / svg 3599KB

最適化されたsvgだから意味があるのであって、単にpngsvgに変換することはナンセンスなのかな。と。