DjangoとPILでアップロードした画像のExif情報を削除してリサイズ

mysqlclientがエラーでインストールできない時の対処法

Djangoで掲示板のようなものを作っていて、そこに画像も投稿できるようにしました。

単純に画像をアップロードするのは、簡単だったのですが、投稿していただいた方のプライバシーを守るために画像のExif情報を削除する必要がありました。

また、大きすぎる画像のサイズを小さくリサイズする必要もあったので、それを実装しました。

既に保存してある画像ファイルを引っ張ってきてPILで処理するというのは簡単なのですが、ユーザーからフォームを使ってアップロードしてもらった画像をデータベースに保存する前に処理する方法が調べてもなかなか見つからなくて苦労しました。

なんとかやりたい事ができたので、メモしておきます。

models.py


class EvaluationData(models.Model):
    <省略>
    image1 = models.ImageField(null=True, upload_to='media/')

vies.py


from django.core.files.uploadedfile import InMemoryUploadedFile

from PIL import Image
import io

<省略>

dealer_evaluation_model = DealerEvaluationData()
evaluation_model.image1 = del_exif(request.FILES['image1'])

<省略>

def del_exif(image1):
    with Image.open(image1) as img_object:

                <省略> リサイズしたり角度を調整したり

        image_io = io.BytesIO()
        img_object.save(image_io, format="JPEG")
        image_file = InMemoryUploadedFile(image_io, field_name=None,
                                        name='test.jpeg',
                                        content_type="image/jpeg",
                                        size=image_io.getbuffer().nbytes,
                                        charset=None)
        
        return image_file

これでフォームからアップロードされた画像のExif情報を削除する事ができました。

縦向きの画像を横になったりすることもあるので、角度を調整する処理や画像のサイズをリサイズする処理を書くこともできますので、あとはご自由にどうぞ。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする