本サイトは広告・プロモーションが含まれています
Python

【Python】画像の容量を縮小するデスクトップアプリ作成


画像処理業務をしていると、意外と簡単な処理を同僚や先輩・上司から依頼されることが多々あります。

その1つに画像の容量を小さくしてくれという依頼があります。

画像のサイズを自由に変えることができれば、ファイル容量の削減が容易にできます。
Pythonであれば画像のリサイズが簡単にでき、出どころが不明瞭なフリーソフトをインストールする必要もありません。

本記事ではTkinterとOpenCVを組み合わせて、使いやすく便利な画像縮小アプリを開発します。


必要なライブラリのインストール


まずは必要なライブラリをインストールしましょう。
以下のコマンドを使用して、OpenCVとPillowをインストールします。

pip install opencv-python
pip install Pillow

Pythonコード


以下のコードをエディタに入力して保存し、”main.py”という名前でファイルを作成します。

import cv2
from tkinter import Tk, filedialog, Button, Label
from PIL import Image, ImageTk

def select_image():
    # ファイルダイアログを表示して画像ファイルを選択
    root = Tk()
    root.withdraw()
    file_path = filedialog.askopenfilename()

    # 選択された画像ファイルのパスを保持
    global selected_image_path
    selected_image_path = file_path
    

    # 画像を表示
    image = Image.open(file_path)
    image.thumbnail((400, 400))  # サイズを縮小
    photo = ImageTk.PhotoImage(image)
    image_label.configure(image=photo)
    image_label.image = photo
    image_label.pack()

def resize_image():
    # 画像が選択されていない場合は処理しない
    if not selected_image_path:
        return

    # 画像を読み込む
    image = cv2.imread(selected_image_path)

    # 画像のリサイズ
    resized_image = cv2.resize(image, None, fx=0.5, fy=0.5)  # サイズを半分に縮小

    # リサイズ後の画像を保存
    save_path = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg"), ("PNG files", "*.png"), ("All files", "*.*")])
    cv2.imwrite(save_path, resized_image)

    # 処理完了メッセージを表示
    print("画像のリサイズが完了しました。")
 
#デスクトップアプリが閉じられたら、pythonの実行を終了する   
def close_window():
    root.quit()
    root.destroy()

# 初期化

selected_image_path = None

# 画像選択ボタンを作成
root = Tk()
root.title("画像リサイズ")
select_button = Button(root, text="画像を選択", command=select_image)
select_button.pack()

# リサイズボタンを作成
resize_button = Button(root, text="画像をリサイズ", command=resize_image)
resize_button.pack()

# 画像を表示するラベルを作成
image_label = Label(root)
image_label.pack()

root.protocol("WM_DELETE_WINDOW", close_window)
root.mainloop()


openCVにはresizeという、メソッドが用意されているので
画像のサイズを簡単に変えることができます。

メソッドの引数は
cv2.resize(元の画像ファイル名, リサイズ後の画像サイズ, x方向の倍率, y方向の倍率)
のように指定します。

今回のように、倍率を指定して変化させる場合には
リサイズ後の画像サイズ=Noneを指定します。


OpenCVの公式ドキュメントはこちら

コードの実行


ターミナルまたはコマンドプロンプトを開き、
main.pyと同じディレクトリで、以下のコマンドを実行します。

python main.py

実行後に出てくるウィンドウ

ウィンドウが表示されるので、「画像を選択」ボタンをクリックして、縮小したい画像ファイルを選択します。

選択後、するとデスクトップアプリに選択した画像が表示されるようになります。

次にリサイズボタンを押すと、保存先を指定するダイアログが表示されます。
ファイル名入力して拡張子を選択し、適切な場所に保存先を指定し、保存ボタンをクリックします。


画像の縮小が正常に完了したら、指定したディレクトリに画像が保存されているかと思います。


下のような感じで画像が圧縮されます。

左がオリジナル、右がサイズ縮小した画像ファイル。

おわりに


この記事では、Pythonを使用して画像の容量を縮小する
デスクトップアプリを作成する方法について紹介させていただきました。

TkinterとOpenCVを組み合わせることで、使いやすく便利なアプリを作ることができます。さらに、今回のアプリをベースに機能を追加してみたり、GUIデザインをカスタマイズしてみたりすることも可能です。

画像の容量を縮小することは、Webやストレージの効率化に役立つ重要な処理です。このデスクトップアプリを活用して、効果的な画像処理を行いましょう。

以上が、Pythonで画像の容量を縮小するデスクトップアプリを作成するための手順となります。
pyinstallerを使ってexe化して、会社の同僚に配布することも可能なので
ぜひ、実際に試してみてください。

それでは。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA