経緯
デジカメで撮った画像をExcelに貼り付けようとするときに、1枚5MBもあって
Excelファイルが重くなってました。
ペイントアプリでリサイズすることは可能ですが、めんどくさいので、
今回,C#でWindowsアプリを作ってみました。
レイアウト
まず、アプリのレイアウトを書きます。
| ツール名 | Text名 | (Name) |
| label | 画像のパス: | label1 |
| label | 保存先のパス: | label2 |
| TextBox | textBox_picture_path | |
| TextBox | textBox_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」という名前で保存されてます。
こんな感じです。
何かの参考になれば、幸いです。
ここまで読んでいただきありがとうございました。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
