LoginSignup
9
16

More than 5 years have passed since last update.

画像をリサイズするプログラムをexe化して配布したい Python3+pyinstaller

Last updated at Posted at 2017-07-14

企画・概要

  • python3がない環境のPCでpython3のプログラムを動かしたい
  • ソフト使えばええやんとか禁句(書いてみることに意味があるキリッ)
  • pyinstallerを使えばexe化ができるらしい

環境

  • windows10
  • Python 3.5.2 |Anaconda 4.2.0 (64-bit)
  • PyInstaller: 3.2.1

実行

それでは早速やってみよう。
コマンドプロンプトで以下を入力してインストール。

pip install pyinstaller

exe化するプログラム

今回書いたものは画像をリサイズするプログラムだ。
フリーソフトを使えば一瞬でできることをわざわざ書いているので真似する必要はない。
お好きなプログラムでどうぞ。

resize.py
#! python3
# -*- coding: utf-8 -*-
from PIL import Image
import sys


print("画像のリサイズを行います")

try:
    inp_img = str(input("ファイル名を入力:"))
    filename = "picture/" + inp_img + ".jpg"
    img = Image.open(filename, "r")
except FileNotFoundError:
    print("【エラー】ファイルが見つかりません!\n"
          "ファイルはpictureフォルダの中に入れてください")
    exit()

try:
    inp_a = int(input("縦:"))
    inp_b = int(input("横:"))
except ValueError:
    print("【エラー】半角数字を入力してください")
    exit()

resize_img = img.resize((inp_a, inp_b))

# 2017/07/21
# .jpgを削除しないと'pic01.jpg_resize2.jpg'のようになる
filename = filename.replace(".jpg", "")
filename = filename + "_resize2.jpg"

resize_img.save(filename, "JPEG", quality=100, optimize=True)
print("【結果】: " + filename)

thumbnailを使うと綺麗にリサイズできると読んだので試してみたが、指定通りの大きさにリサイズされなかったため断念(コードはおまけ参照)。resize()であれば指定通りのサイズになる。

FileNotFoundErrorはファイルが見つからなかったときのエラー。
ValueErrorは数字以外を入力したときのエラー対策。

qualityの数字を上げることで品質を上げることができる。

画像のリサイズを行います
ファイル名を入力:pic01
縦:100
横:200
【結果】: picture/pic02_resize2.jpg

※pillowが入ってなければ以下のコマンドを実行。

pip install pillow

pyinstallerを使おう

コマンドプロンプトで以下を入力。

pyinstaller.exe resize.py --onefile --clean

(※1)resize.pyの部分にはexe化したいプログラム名を書くこと。
(※2)当然だが指定のプログラムが配置されている階層で行うこと。

/distができたと思うのでその中にあるexeをダブルクリック。
resize.pyでは/dist/pictureが必要なので予め作成して画像を突っ込んでおく必要がある。自動でフォルダを作るとかそんな処理を書いた覚えはない。

ちなみにこのままではエラーが出たときに一瞬で画面が消えてしまってコメントが読めない。そこでもう少し書き換えることにする。

def end():
    while True:
        key = str(input("'e'を入力すると終了します:"))
        try:
            if key == "e":
                sys.exit()
        except ValueError:
            break

前のプログラムのexit()をend()に書き換えればeキーが入力されるまで終了しないようになる。

反省

exe化するプログラムはコマンドプロンプトに依存する形のものではなく、PyQtなどを使ったGUIの方が良いと思った。

おまけ

thumbnailを使ったリサイズプログラム。
適当な大きさにリサイズしたい場合はthumbnailを、指定通りにリサイズしたい場合はresizeを使うのが良いだろう。

from PIL import Image

print("リサイズを行います. jpgのみ対応.")
inp_img = str(input("ファイル名のみ入力してください:"))
filename = "picture/" + inp_img + ".jpg"
img = Image.open(filename, 'r')

a = int(input("縦:"))
b = int(input("横:"))

img.thumbnail((a, b), Image.ANTIALIAS)
img.save(filename+"_resize.jpg", "JPEG", quality=100, optimize=True)

参考資料

9
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
16