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

速攻でメモできる QuickNote リリースしました!

QuickNoteは動作が超軽量でサクサクかけるノートアプリです。一瞬の閃きを逃さずにノートを開き書き始めることができます。 アカウント登録も不要です。お試しあれ!

Excel操作をコマンドで! proBoarderExcel

Excelはマウスで操作するのが基本ですが、マウス操作に疲れてはいませんか? キーボードでExcel操作ができるようになるアプリです。オープンソースで無料です。

積み上げ! Daily Stack リリースしました!

Daily Stack は日々の積み上げを管理するToDoアプリです。過去の積み上げの振り返りだけでなく、ツイート機能もあります。 アカウント登録不要ですぐに使い始めることができます。

ExecNote.app リリースしました!

ExecNoteは、コードが実行できるMarkdownアプリケーションです。Markdownドキュメント内に記載したコードをクリックすると実行ができます。わざわざターミナルを 起動させる必要がありません!無料ですのでもしよければダウンロードをお願いします。

About Me

11年目のシステムエンジニアです。アプリで生活や仕事を改善したい🐱仕事効率化、自動化のアプリ開発が得意です、ご相談ください。 🚀エンタメ系アプリの開発も模索中🐬社内SEや個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱