ブログを書いていて、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
クラスの詳細は以下にドキュメントがあります。
次に変換先ファイルパスを指定して 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対応ですので、まずはサンプルをダウンロードして何が書かれているか確認してはいかがでしょうか。
コメント