画像をJpegファイルで保存する (Jpegファイルへの変換)

画像をJpegファイルで保存するコードを紹介します。

ImageFormatを指定して Bitmapクラス,ImageクラスのSaveメソッドを呼び出す方法

BitmapクラスのSaveメソッドの第二引数に"System.Drawing.Imaging.ImageFormat.Jpeg"を与えるとJpeg形式で画像を保存できます。

bmp.Save(jpegFileName, System.Drawing.Imaging.ImageFormat.Jpeg);

ImageCodecInfo, EncoderParameterを用いて Bitmapクラス,ImageクラスのSaveメソッドを呼び出す方法

Jpeg用のImageCodecを取得し、EncorderParameterを作成してImageクラスのSaveメソッドを呼び出すことでJpeg形式で保存できます。

ImageCodecInfo jpegEncoder = null;
foreach (ImageCodecInfo ici in ImageCodecInfo.GetImageEncoders()) {
  if (ici.FormatID == ImageFormat.Jpeg.Guid) {
     jpegEncoder = ici;
     break;
  }
}
if (jpegEncoder != null) {
  EncoderParameter encParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
  EncoderParameters encParams = new EncoderParameters(1);
  encParams.Param[0] = encParam;
  image.Save(jpegFileName, jpegEncoder, encParams);
}

サンプルプログラム

UI

下図のUIを作成します、ButtonとTextBoxを配置します。OpenFileDialogも用いますので配置し忘れないでください。
画像をJpegファイルで保存する (Jpegファイルへの変換):画像1

コード

下記のコードを記述します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.IO;

namespace JpegConvert
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button_Exec1_Click(object sender, EventArgs e)
    {
      string FileFullName = textBox_Input.Text;
      string filePath = Path.GetDirectoryName(FileFullName);
      string fileName = Path.GetFileName(FileFullName);

      Image image = Image.FromFile(FileFullName);

      ImageCodecInfo jpegEncoder = null;

      foreach (ImageCodecInfo ici in ImageCodecInfo.GetImageEncoders()) {
        if (ici.FormatID == ImageFormat.Jpeg.Guid) {
          jpegEncoder = ici;
          break;
        }
      }
      if (jpegEncoder != null) {

        EncoderParameter encParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
        EncoderParameters encParams = new EncoderParameters(1);
        encParams.Param[0] = encParam;

        string jpegFileName = Path.ChangeExtension(fileName, "jpg");
        image.Save(filePath + "\\" + jpegFileName, jpegEncoder, encParams);

        textBox_Output.Text += "Jpeg形式で保存しました。\r\n";
      }
    }

    private void button_Exec2_Click(object sender, EventArgs e)
    {
      string FileFullName = textBox_Input.Text;
      string filePath = Path.GetDirectoryName(FileFullName);
      string fileName = Path.GetFileName(FileFullName);

      Bitmap bmp = new Bitmap(FileFullName);
      string pngFileName = Path.ChangeExtension(fileName, "jpg");
      bmp.Save(filePath + "\\" + pngFileName, System.Drawing.Imaging.ImageFormat.Jpeg);
      textBox_Output.Text += "Jpeg形式で保存しました。\r\n";
    }

    private void button_reference_Click(object sender, EventArgs e)
    {
      if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
        textBox_Input.Text = openFileDialog1.FileName;
      }
    }
  }
}

Button1はImageCodecInfo, EncoderParameterを用いて ImageクラスのSaveメソッドを用いるコードです。Button2はBitmapクラスのSaveメソッドを持ちるコードです。
EncoderParameterのSystem.Drawing.Imaging.Encoder.Qualityパラメーターの値はlongである必要があることに注意してください。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。
画像をJpegファイルで保存する (Jpegファイルへの変換):画像2

画像ファイルを準備します。今回は下図のビットマップファイルを用います。
画像をJpegファイルで保存する (Jpegファイルへの変換):画像3

[参照]ボタンをクリックします。ファイル選択ダイアログが表示されますので先ほど準備した"sample.bmp"ファイルを選択します。
画像をJpegファイルで保存する (Jpegファイルへの変換):画像4

ファイルを選択するとテキストボックスに画像ファイルのファイルパスが表示されます。
画像をJpegファイルで保存する (Jpegファイルへの変換):画像5

[変換1]または[変換2]ボタンをクリックします。Jepg形式に変換されたファイルが保存されます。
画像をJpegファイルで保存する (Jpegファイルへの変換):画像6

Jpeg形式に変換された画像ファイルが作成されていることが確認できます。
画像をJpegファイルで保存する (Jpegファイルへの変換):画像7

圧縮オプションと画像サイズ

圧縮オプションに対する画像サイズの変化を確認します。

画像をJpegファイルで保存する (Jpegファイルへの変換):画像8

サイズ

Qualityファイルサイズ(byte)
オリジナルBMP691,256
05,259
107,021
208,525
3010,392
4011,854
5012,683
6013,534
7015,320
7515,875
8016,767
9020,043
10028,591
15028,591
指定なし15,875


ImageCodecInfo, EncoderParameterを用いずにSaveメソッドを用いてJpeg形式で保存した場合Quality=75と同じ品質で保存されます。

画像

元画像

画像をJpegファイルで保存する (Jpegファイルへの変換):画像9

Quality 0
画像をJpegファイルで保存する (Jpegファイルへの変換):画像10
Quality 10
画像をJpegファイルで保存する (Jpegファイルへの変換):画像11
Quality 20
画像をJpegファイルで保存する (Jpegファイルへの変換):画像12
Quality 30
画像をJpegファイルで保存する (Jpegファイルへの変換):画像13

Quality 40
画像をJpegファイルで保存する (Jpegファイルへの変換):画像14
Quality 50
画像をJpegファイルで保存する (Jpegファイルへの変換):画像15
Quality 60
画像をJpegファイルで保存する (Jpegファイルへの変換):画像16
Quality 70
画像をJpegファイルで保存する (Jpegファイルへの変換):画像17
Quality 75
画像をJpegファイルで保存する (Jpegファイルへの変換):画像18
Quality 80
画像をJpegファイルで保存する (Jpegファイルへの変換):画像19
Quality 90
画像をJpegファイルで保存する (Jpegファイルへの変換):画像20
Quality 100
画像をJpegファイルで保存する (Jpegファイルへの変換):画像21
Quality 150
画像をJpegファイルで保存する (Jpegファイルへの変換):画像22
Quality 指定なし
画像をJpegファイルで保存する (Jpegファイルへの変換):画像23
AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2014-03-27
Copyright © 1995–2025 iPentec all rights reserverd.