2013-06-29 102 views
7

サムネイルフィルタがあります。サムネイルフィルタは、画像の幅が画像の幅よりも大きくなると左に90度回転します。元の画像は真っ直ぐであり、キャッシュされた画像は回転している)。関連するコードは次のようになります。Django-imagekitで画像の自動回転を停止するサムネイル

profile_image = models.ImageField(upload_to='profile_images', default='profile_images/icon.png') 
profile_icon = ImageSpecField(source='profile_image', 
           processors=[processors.Thumbnail(width=72, height=72, crop=True)], 
           format='JPEG', 
           options={'quality': 60}) 

自動回転を停止するにはどうすればよいですか?

答えて

2

これは、アップロードされている画像に問題があることが判明しました.Djangoでは何も問題ありません。 iPhoneで撮影された画像には携帯電話の向きに関するメタデータを付けることができます。これにより、ブラウザは写真の自然な向きを横向きに見なすことができます。しかし、プレビューでその写真を開き、それを左に回転してから通常に戻してからもう一度保存すると、問題はありません。

Feed image shows rotated in certain browsers

サプライズ!

7

嬉しいことに、あなたはこれを理解しましたが、ImageKitはあなたを助けてくれます。トランスポーズプロセッサー(imagekit.processors.Transpose)を確認してください。デフォルトでは、画像内のメタデータが使用され、その量だけ回転します。後続のプロセッサが画像からメタデータを取り除くので、このプロセッサを最初にリストするようにしてください。 matthewwithanmの便利ポインタについては詳しく説明し

+0

[imagekit documentation](https://django-imagekit.readthedocs.io/ja/latest/) – brennan

3

、OPのコードは次のように見えるように微調整することになります。

profile_image = models.ImageField(upload_to='profile_images', default='profile_images/icon.png') 
profile_icon = ImageSpecField(source='profile_image', 
           processors=[ 
            processors.Transpose(), 
            processors.Thumbnail(width=72, height=72, crop=True) 
           ], 
           format='JPEG', 
           options={'quality': 60}) 

つまり、引数なしでprocessors.Transpose()への呼び出しを追加します。

Flickrからダウンロードしたオリジナルのポートレートフォーマットの画像でこの問題が発生しました。その画像(iPhoneで撮影)はポートレート形式で、デフォルトではimagekitがそれを回転させます。この特定のケースでは、反時計回りに90度回転します。

関連する問題