Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django PIL image save()の時のformat指定を関数化する

概要

image.save(image.url, "フォーマット") の時のフォーマットをファイルの拡張子によって、自動で指定する関数を作りたい。

コード

def get_file_extension(file_extension):
    if file_extension == "jpg":
        upper_file_extension = "JPEG"
    else:
        upper_file_extension = file_extension.upper()
    return upper_file_extension

こんな感じで拡張子を大文字に変換するfunctionを設定。

jpg -> JPEGに変換しているのは、なぜかjpgの時は、PILで、JPEGで指定しないとうまく認識してくれないため。 それ以外の拡張子は拡張子名をそのまま大文字にするだけでいいはず!

def create_new_image(media_path, instance, owner_slug):
 ...
    temp_image = open(temp_file_path, "wb")
    gray_img.save(temp_image, upper_file_extension)# そのうちちょっと変える。
    thumb_data = open(temp_file_path, "rb")

    thumb_file = File(thumb_data)
    instance.image.save(filename, thumb_file)
    instance.save()
  • temp_image = open(temp_file_path, "w")だと、type errorが出たので、wb に変更
  • saveの時に、upper_file_extensionを代入

これで一応errorなしにsaveできました。