41

次のシナリオがあります。

  • iPhone から画像を EXIF 情報とともに Pyhon ソケット サーバーに送信しています。
  • 画像が撮影されたときの実際の向きに基づいて、画像を適切な向きにする必要があります。IOS は常にイメージを Landscape Left として保存し、実際の向きを EXIF フィールド (EXIF.Image.Orientation) として追加することを知っています。
  • 実際の向きを確認するために EXIF フィールドを読んでいます。次に、wxpython を使用して画像を適切な向きに回転させます。

EXIF操作にpyexiv2を使用しています。

問題: wxpython を使用して画像を回転しているときに失われたサムネイルを含む EXIF 情報。

私がやったこと:画像を回転させる前にEXIFを読んでいます。EXIF の方向フィールドをリセットしました。それからローテーション後に元に戻しています。

問題:

EXIF 内のサムネイルは回転しません。そのため、画像とサムネイルの向きが異なります。

質問?

EXIF情報を保持して画像を回転させるPIL以外のモジュールはありますか?

サムネイルの向き用に別の EXIF フィールドはありますか?

サムネイルだけを回転させる方法はありますか?

ご協力いただきありがとうございます...

4

6 に答える 6

105

この解決策は私にとってはうまくいきます: PIL サムネイルが画像を回転させていますか?

iPhone か iPad かを確認する必要はありません。写真に方向タグが付いている場合は、回転させてください。

from PIL import Image, ExifTags

try:
    image=Image.open(filepath)

    for orientation in ExifTags.TAGS.keys():
        if ExifTags.TAGS[orientation]=='Orientation':
            break
    
    exif = image._getexif()

    if exif[orientation] == 3:
        image=image.rotate(180, expand=True)
    elif exif[orientation] == 6:
        image=image.rotate(270, expand=True)
    elif exif[orientation] == 8:
        image=image.rotate(90, expand=True)

    image.save(filepath)
    image.close()
except (AttributeError, KeyError, IndexError):
    # cases: image don't have getexif
    pass

前:

前

後: 後

于 2014-11-14T10:42:17.497 に答える
0
from PIL import Image

def reorient_img(pil_img):
    img_exif = pil_img.getexif()

    if len(img_exif):
        if img_exif[274] == 3:
            pil_img = pil_img.transpose(Image.ROTATE_180)
        elif img_exif[274] == 6:
            pil_img = pil_img.transpose(Image.ROTATE_270)
        elif img_exif[274] == 8:
            pil_img = pil_img.transpose(Image.ROTATE_90)

    return pil_img
于 2021-12-12T11:31:23.760 に答える