画像リサイズアプリ【C#】

目次

経緯

デジカメで撮った画像をExcelに貼り付けようとするときに、1枚5MBもあって

Excelファイルが重くなってました。

ペイントアプリでリサイズすることは可能ですが、めんどくさいので、

今回,C#でWindowsアプリを作ってみました。

レイアウト

まず、アプリのレイアウトを書きます。

ツール名Text名(Name)
label画像のパス:label1
label保存先のパス:label2
TextBoxtextBox_picture_path
TextBoxtextBox_save_path
Button選択button_picture_path
Button選択button_chose_save_path
Button実行button_run

という構成です。配置は(Name)で表すと

label1,textBox_picture_path,button_picture_path

label2,textBox_save_path,button_chose_save_path

button_run

という並びとなります。

コード

以下がコードです。

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


namespace デジカメの画像の容量を小さくする
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            textBox_picture_path.Text = "ドラッグ&ドロップしてください";

            // ドラッグ&ドロップを有効化
            textBox_picture_path.AllowDrop = true;
            textBox_picture_path.DragEnter += (sender, e) => e.Effect = DragDropEffects.Copy;
            textBox_picture_path.DragDrop += (sender, e) =>
            {
                var files = e.Data.GetData(DataFormats.FileDrop) as string[];
                if (files != null && files.Length > 0)
                {
                    textBox_picture_path.Text = files[0];
                }
            };
        }

        private void textBox_picture_path_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox_save_path_TextChanged(object sender, EventArgs e)
        {

        }

        private void button_run_Click(object sender, EventArgs e)
        {
            string directoryPath = textBox_picture_path.Text;

            if (Directory.Exists(directoryPath))
            {
                // 保存先フォルダ内に新しいフォルダを作成
                string newFolder = Path.Combine(textBox_save_path.Text, "ResizedImages");
                Directory.CreateDirectory(newFolder); // フォルダが存在しない場合は作成

                // フォルダ内のすべての画像ファイルを取得
                var imageFiles = Directory.EnumerateFiles(directoryPath, "*.*", SearchOption.TopDirectoryOnly)
                    .Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ||
                                s.EndsWith(".png", StringComparison.OrdinalIgnoreCase) ||
                                s.EndsWith(".bmp", StringComparison.OrdinalIgnoreCase));

                foreach (var filePath in imageFiles)
                {
                    try
                    {
                        string fileName = Path.GetFileName(filePath); // 元のファイル名を保持
                        string savePath = Path.Combine(newFolder, fileName); // 新しいフォルダ内の保存先パスを構築
                        ResizeImage(filePath, savePath, 800, 600); // 画像をリサイズして保存
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"エラーが発生しました: {ex.Message}", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return; // エラーが発生した場合は処理を中断
                    }
                }
                MessageBox.Show("全ての画像がリサイズされて保存されました。", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("指定されたパスは有効なフォルダではありません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }




        public void ResizeImage(string originalFile, string resizedFile, int width, int height)
        {
            using (Image originalImage = Image.FromFile(originalFile))
            {
                using (Bitmap resizedBitmap = new Bitmap(width, height))
                {
                    using (Graphics graphics = Graphics.FromImage(resizedBitmap))
                    {
                        graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                        graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        graphics.DrawImage(originalImage, 0, 0, width, height);

                        // リサイズされた画像の保存
                        resizedBitmap.Save(resizedFile, ImageFormat.Jpeg);  // JPEG形式で保存
                    }
                }
            }
        }

        private void button_chose_save_path_Click(object sender, EventArgs e)
        {
            using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog())
            {
                // ダイアログの説明テキストを設定
                folderBrowserDialog.Description = "画像を保存するフォルダを選択してください。";

                if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                {
                    // 選択されたフォルダのパスをテキストボックスに設定
                    textBox_save_path.Text = folderBrowserDialog.SelectedPath;
                }
            }
        }

        private void button_picture_path_Click(object sender, EventArgs e)
        {
            using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog())
            {
                folderBrowserDialog.Description = "画像ファイルが格納されているフォルダを選択してください。";

                if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                {
                    textBox_picture_path.Text = folderBrowserDialog.SelectedPath; // パスを設定
                }
            }
        }

        private void textBox_picture_path_Enter(object sender, EventArgs e)
        {
            if (textBox_picture_path.Text == "ドラッグ&ドロップしてください")
            {
                textBox_picture_path.Text = ""; // テキストをクリア
            }
        }

        private void textBox_picture_path_Leave(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(textBox_picture_path.Text))
            {
                textBox_picture_path.Text = "ドラッグ&ドロップしてください"; // 初期テキストを再表示
            }
        }

    }
}

使い方は、

まず、textBox_picture_pathにドラックドロップか「選択」ボタンを押して、リサイズしたい画像が入っているフォルダを選択してください。

次にtextBox_save_pathにリサイズし終えた画像のフォルダを保存したい場所を「選択」ボタンを押して、設定してください。

最後に「実行」を押すと、リサイズされた画像フォルダが指定された先「ResizedImages」という名前で保存されてます。

こんな感じです。

何かの参考になれば、幸いです。

ここまで読んでいただきありがとうございました。

スクールの紹介

最後に宣伝をさせてください。

夢見るAIエンジニアへ、今こそ一歩を踏み出せ!

最近、AI技術やデータサイエンスに興味を持ち始めたあなた。将来、AIエンジニアやデータサイエンティストとして活躍したいと考えているかもしれません。また、AIを使って業務課題や研究課題を解決したい、あるいは教養としてAIの知識を深めたいと思っている方もいるでしょう。

しかし、学び始めるとなると「どこから手をつけて良いのか分からない」「専門的すぎて理解できない」といった悩みが生じることも。そんなあなたのために、この3ヶ月間集中してAIプログラミングを習得するオンラインコーチングサービスがオススメです!

なぜこのサービスが選ばれるのか?その理由はこちら

  1. 初心者から上級者まで
    完全なプログラミング初心者から研究者まで、幅広い方々に優良なコンテンツが提供されます。
  2. 徹底的な進捗管理
    受講者の進捗をしっかりとチェックし、つまずきやすいポイントでのフォローが万全です。
  3. 専属メンターによる徹底サポート
    AIの学び方から、実際の適用まで、専属のメンターが手厚くサポートします。
  4. 場所を選ばず学べるオンライン完結
    東京以外の地域からも、気軽に学び始めることができます。

信頼の実績多数!
・日本最大級のプログラミングスクール実績
・受講者総数700名以上
・SaaS型学習サービス会員65,000名以上
・企業導入実績120社以上
・グッドデザイン賞受賞
・著名な賞受賞歴や経団連加盟も実現

夢を叶えるための第一歩を、一緒に踏み出しませんか?今なら、あなたもその一員として学び始めることができます!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次