Django thumbnail imageを作成する。
def original_post_save_receiver(sender, instance, *args, **kwargs):
if instance.image:
processed_obj = OriginalImageProcessed.objects.create(original=instance)
owner_slug = instance.slug
media_path = instance.image.path
filename = os.path.basename(media_path)
basename, file_extension = filename.split(".")
thumb = Image.open(media_path)
size = (100, 100)
thumb.thumbnail(size, Image.ANTIALIAS)
temp_loc = "%s/%s/tmp" %(settings.MEDIA_ROOT, owner_slug)
if not os.path.exists(temp_loc):
os.makedirs(temp_loc)
temp_file_path = os.path.join(temp_loc, filename)
if os.path.exists(temp_file_path):
temp_path = os.path.join(temp_loc, "%s" %(random.random()))
os.makedirs(temp_path)
temp_file_path = os.path.join(temp_path, filename)
temp_image = open(temp_file_path, "w")
thumb.save(temp_image,'JPEG')
thumb_data = open(temp_file_path, "rb")
thumb_file = File(thumb_data)
processed_obj.image.save(filename, thumb_file)
processed_obj.save()
post_save.connect(original_post_save_receiver, sender=Original)
ハマったポイント
thumb.save(temp_image)
も、JPEGの拡張子をいれておかないと、keyerrorが発生してしまう。そのため、thumb.save(temp_image,'JPEG')
というように、該当ファイルの拡張子を指定しておく。
thumb_data = open(temp_file_path, "r") だと、python3ではうまく読み込めない。(unicode errorが出る。)そのため、python3では、"rb"にする。