2009年01月25日

[Python] 画像の縦横比を見て回転させ縮小するプログラム Ver2

前回[明鏡止水]作ったプログラム、Pathに日本語が含まれているとエラー吐くので修正。Python、日本語周りが面倒・・・。

コード

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# 引数で指定したフォルダの画像ファイルを
# 出力先フォルダに縮小・回転しながらコピーする

import os, sys,glob
from PIL import Image

# 出力先フォルダ指定。
TARGET_DIR = u"C:\\PHOTO"
#COWON A3向け
max_size = (800, 480)
#PSP向け
#max_size = (480, 270)
#対象拡張子
ext_dic = [".jpg",".jpeg",".png",".bmp"]

def getOutputDirectoryName(sourcePath):
    dirName = os.path.split(sourcePath)
    return dirName[1]

def makeOutputDirectory(outputDirPath):
    if os.path.isdir(outputDirPath) == False:
        os.mkdir(outputDirPath) >

def isTarget(ext):
    if ext.lower() in ext_dic:
        return True
    else:
        return False

def shrinkImage(sourcePath): 
    outputDirPath = os.path.join(TARGET_DIR, getOutputDirectoryName(sourcePath))
    makeOutputDirectory(outputDirPath)

    for infile in glob.glob(os.path.join(sourcePath,"*.*")):
        root, ext = os.path.splitext(infile)
        if isTarget(ext) == True:
            sourceImage = Image.open(infile)
            destImage = sourceImage
            # 縦長の画像の場合、回転させる
            if destImage.size[0] < destImage.size[1]:
                destImage = destImage.rotate(270)
            destImage.thumbnail(max_size, Image.ANTIALIAS)
            destImage.save(os.path.join(outputDirPath,"s_" + os.path.basename(infile)))

if __name__=='__main__':
    #引数がおかしい場合
    if len(sys.argv) != 2:
        print('Usage: # python %s [SourceImageDirectoryPath]' % sys.argv[0])
        quit()

    sourcePath = os.path.dirname(sys.argv[1] + '\\')

    if os.path.isdir(sourcePath) == False:    
        print('The directory does not exist.')
        quit()
    elif sourcePath == TARGET_DIR: 
        print('The input destination is the same as the output destination. ')
        quit()
    else:
        shrinkImage(sourcePath) 
タグ:Python
posted by MINE at 19:06 | Comment(0) | TrackBack(0) | Python | このブログの読者になる | 更新情報をチェックする | edit
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック