C# で画像フォーマットを変換するプログラム

ブログを書いていて、png を jpg に変換していたのですが、1ファイルずつペイント開いてリサイズして 名前をつけて保存していくのが、かなりめんどくさくなりましたので、プログラムを書きました。

なんで C# なのか?

最初は Node.js でやりたかったので、NPM から png-to-jpeg を インストールして使ってみましたが、私が変換したい画像はうまくいきませんでした。

変換するソースコード

    using System;
    using System.Drawing;
    
    namespace ImgConv
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                String fromFilePath = args[0];
                String toFilePath = args[1];
    
                Image orgImage = Image.FromFile(fromFilePath);
                orgImage.Save(toFilePath);
    
                orgImage.Dispose();
            }
        }
    }

プログラム引数から、以下2つを取得します。

  • fromFilePath (変換元ファイルパス)
  • toFilePath(変換先ファイルパス)

その後、Imageクラスでイメージオブジェクトを作成します。

Imageクラスの詳細は以下にドキュメントがあります。

Image Class | Microsoft Docs

次に変換先ファイルパスを指定して Save()メソッドを呼び出します。

最後に Dispose() して終了です。

すごい簡単です。変換フォーマットも拡張子をみて判断してくれているようです。

こんなに簡単にできるなんて、びっくりしました。

画像のサイズ変更

サイズ変更だって簡単にできてしまいます。

    using System;
    using System.Drawing;
    
    namespace ImgConv
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                int paramLength = 0;
                String fromFilePath = "";
                String toFilePath = "";
                int resizedWidth = 0;
                int resizedHeight = 0;
    
                paramLength = args.Length;
                fromFilePath = args[0];
                toFilePath = args[1];
    
                Image orgImage = Image.FromFile(fromFilePath);
    
                resizedWidth = orgImage.Width;
                resizedHeight = orgImage.Height;
    
                if (paramLength > 2 )
                {
                    resizedWidth = Int32.Parse(args[2]);
                    resizedHeight = Int32.Parse(args[3]); 
                }
    
                Bitmap bmpObj = new Bitmap(orgImage, new Size(resizedWidth, resizedHeight));
    
                orgImage.Save(toFilePath);
    
                orgImage.Dispose();
            }
        }
    }

一番のミソはここです。

    Bitmap bmpObj = new Bitmap(orgImage, new Size(resizedWidth, resizedHeight));
    orgImage.Save(toFilePath);

Sizeクラスで幅と高さを設定して、Bitmapオブジェクトを生成しています。

そのあとに Save メソッドで保存しています。

感想

Node.js (TypeScript) には無いものが C# にはあるように思います。 .net core フレームワークがあれば マルチプラットフォームで動作するのも魅力です。


\ シ ェ ア お ね が い し ま す ! ! /

目次