パソコンオタクになりたい

難しいことは抜きにしてソフトからハードまでパソコンを楽しんでいます。Linuxが好きなのでLinuxの記事多めです。もっとデスクトップとしてのLinuxが普及すればいいのになと思っています。座右の銘:人生は暇つぶし

【Python】画像サイズ一括変換ツール

子供が、カメラで写真を撮って、パラパラ漫画を作りました。

せっかくなので、動画にしようと奮闘。

その際、画像のサイズを横幅1280pxに変更する必要がありました。

オンラインでの変換ツールもあるけど、一度に変換できる枚数に制限があったり、ダウンロードするときにzipに圧縮されたりして、けっこう面倒でした。

たまにはツールを作ってみるか、と思い立ち、流行りのPythonで作れないか調べてみたら、簡単にできそうだったので作成。

こんなに簡単ならもっと早く作ればよかった!

せっかくなので、ソースコードとつまずいた点をシェアです。

ちなみにPython初心者、というか初めて触ったので、そんなの当たり前だよ!ってものばかりです。

 

PILを使うには、インストールが必要

画像を扱うライブラリ(?)のPILは、Pythonをインストールしただけでは使えないみたいです。

別途、コマンドでのインストールが必要です。

 

Image.resizeの使い方

めっちゃはまりました。

「TypeError: 'int' object is not iterable」っていうエラーが出て、小一時間調べました。

Image.resize関数は、Image.resize( ( ) ) と、カッコが2つ必要でした。

まぁ、ちゃんと使い方調べてなさいってだけですが。

引数は、横幅と縦幅だけだから、当然カッコは、1つでいいかと…

 

if文に:がいる

Pythonって、文末に;とかいらないので、なーもいらんのかなって思ってましたが、if文には:が必要でした。

 

ソースコード全文

ということでソースコード全文です。

こんな少ないコードで書けちゃうんですね。

もうちょっと勉強してみようかな。

 

# インポート
from tkinter import filedialog
import glob
import sys
import os
from PIL import Image

# フォルダ入力ダイアログ
dir = 'C:\\'
fld = filedialog.askdirectory(initialdir = dir) 

user_size = input("変換後の横幅をピクセルで指定してください。")

print("以下の設定で実施します。")
print("フォルダ:", fld)
print("サイズ:", user_size, "px")

# 最終確認
user_input = input("変換しますか? はい:y いいえ:n")
if user_input != 'y':
	sys.exit()

#指定されたフォルダ配下にresizeフォルダを作成
new_dir = fld + '/resize/'
os.mkdir(new_dir)

# 画像ファイル一覧を取得
files = glob.glob(fld +'/*.jpg' )

# サイズ変換
for file in files:
    print(file)
    img = Image.open(file)
    mag = int(user_size) / img.width    # 伸縮率
    img_resize = img.resize( (int(user_size), int(img.height * mag)) )
    img_resize.save(new_dir + os.path.basename(file) )