質問: こんにちは。 現在、ファイルサーバから社外のレンタルサーバへ、 画像ファイルをFTP送信する機能を構築・運用しています。 **前提・実現したいこと** 運用を行う中で、日々のファイル総量が増大しており、 FTP送信処理の通信時間を削減する事が課題となっています。 そこで、画像ファイルを圧縮・リサイズして軽量化を行う 機能を新規に構築したいと考えているのですが、 どのツールを使用すべきか?という点で悩んでおります。 【ツールに求める条件】 ・Windows環境で動作する。 ・画像のリサイズ・圧縮ができる。 ・APIのようにプログラムに組み込み、またはコマンドラインで一括処理ができる。 ・.jpgファイルが処理できる。 ・有償/無償は問わない。 **試したこと** まず最初に「ImageMagick(Magick.Net)」をテストしており、 その対抗馬になるような候補を探しています。 ***補足情報(言語/FW/ツール等のバージョンなど)*** OS:Windows 開発言語:C#, VB.NET
回答: .NET Frameworkに含まれるWindows Imaging Componentのラッパーである`System.Windows.Media.Imaging.JpegBitmapEncoder`などを使用すればよいと思います。 ``` // WindowsBase.dll // PresentationCore.dll // using System.IO; // using System.Windows.Media; // using System.Windows.Media.Imaging; // 元画像の読み込み var fileName = "test.jpg"; var src = BitmapFrame.Create(new FileStream(fileName, FileMode.Open)); // 画像の縮小 var dest = new TransformedBitmap(src, new ScaleTransform(0.5, 0.5)); // 画質を指定して保存する var enc = new JpegBitmapEncoder(); enc.Frames.Add(BitmapFrame.Create(dest)); // 品質: 0-100 enc.QualityLevel = 5; using (var fs = new FileStream("out.jpg", FileMode.Create)) { enc.Save(fs); } ```