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 フレームワークがあれば マルチプラットフォームで動作するのも魅力です。

おすすめ本 c#コードレシピ集

c#コードレシピ集は、「文字列を大文字あるいは小文字に変換したい」や「Taskをキャンセルしたい」など逆引き的にコードの書き方を調べられるレシピ集です。

2021年8月に発売された本で、全部で385個のレシピが収録されています。

ジャンルは日付処理やLINQ、並列処理と非同期処理など幅広く記載されています。

Kindle対応ですので、まずはサンプルをダウンロードして何が書かれているか確認してはいかがでしょうか。

カテゴリー: C#

コメントを残す

メールアドレスが公開されることはありません。