2009年02月15日

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

前回、日本語が上手く扱えないとか書いたが[明鏡止水]、Pythonのサイトをよく見たら、全角文字の2バイト目が "\" に当たる場合について、普通に書いてあったわ[PyJUG]。

よく読めよな、俺。
って訳で、日本語のPathで動かなかったプログラム[明鏡止水]が上手く動くようになった。

コード

#!/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(unicode(sys.argv[1],"mbcs") + '\\')

    if os.path.isdir(sourcePath) == False: 
        print('[%s]: Src directory does not exist.' % sourcePath)
        quit()
    elif os.path.isdir(TARGET_DIR) == False: 
        print('[%s]: Dest directory does not exist.' % TARGET_DIR)
        quit()
    elif sourcePath == TARGET_DIR: 
        print('The input destination is the same as the output destination. ')
        quit()
    else:
        shrinkImage(sourcePath)

posted by MINE at 03:06 | Comment(0) | TrackBack(0) | Python | このブログの読者になる | 更新情報をチェックする | edit
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/114263179
※言及リンクのないトラックバックは受信されません。

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