カテゴリー
C#

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

作成者: はるお@ライフハックITプレゼンター

仕事や生活がラクになるアプリ・ツールを開発・提案します。社内講師、開発ツール導入、自部品製造・営業購買経理システム開発経験、RPA導入。応用情報技術者、C#,TypeScript,COBOL,PL/SQL,VBAなど。全工程(要件定義〜運用保守)。海外出張経験🇲🇽🇨🇳。1児👧1匹🐱の父。

ご意見など御座いましたら、コメント欄または Twitterまで頂けると幸いです。

詳しいプロフィールはこちら。

https://usefuledge.com/profile-2

コメントを残す

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