2013-06-11 10 views
8

PILを使用して画像のサイズを変更(サムネイル)しようとすると、exifデータが失われます。サイズ変更時にPILで画像のexifデータを保存する(サムネイルを作成)

サムネイル画像にexifデータを保存するにはどうすればよいですか?私が同じものを検索したときにいくつかのリンクがありますが、うまく動作していないようです。

from PIL import Image 
import StringIO 

file_path = '/home/me/img/a.JPG' 
im = Image.open(file_path) 
THUMB_SIZES = [(512, 512)] 
for thumbnail_size in THUMB_SIZES: 
    im.thumbnail(thumbnail_size, Image.ANTIALIAS) 
    thumbnail_buf_string = StringIO.StringIO() 
    im.save('512_' + "a", "JPEG") 

元の画像にはexifデータが含まれていますが、イメージ(512_a.JPEG)はありません。

答えて

2

ソースコードの一部を読み、exifデータがサムネイルとともに保存されていることを確認する方法を見つけました。

PILでjpgファイルを開くとき、Imageオブジェクトには辞書であるinfo属性があります。キーの1つはexifと呼ばれ、画像からの生のexifデータであるバイト文字列の値を持ちます。あなたは、保存方法には、このバイトの文字列を渡すことができ、それが新しいJPGファイルにEXIFデータを書き込む必要があります:あなたは次の操作を行うことができEXIFデータの判読可能なバージョンを取得するには

from PIL import Image 

size = (512, 512) 

im = Image.open('P4072956.jpg') 
im.thumbnail(size, Image.ANTIALIAS) 
exif = im.info['exif'] 
im.save('P4072956_thumb.jpg', exif=exif) 

from PIL import Image 
from PIL.ExifTags import TAGS 

im = Image.open('P4072956.jpg') 
for k, v in im._getexif().items(): 
    print TAGS.get(k, k), v 
+0

を使用しています、私はそれを試してみましたが、im.save( 'P4072956_thumb.jpg'、EXIF = EXIF) exifデータを保存しない – Jisson

+0

exifデータがあることを確認するために 'print exif'を試してください。または、2番目の例を実行してexifデータを表示することもできます。 –

+0

「Phatch Image Inspector」で元のファイルを開くとexifデータが表示されますが、上記のツールでサイズ変更された画像ファイルを開くとexifは表示されません – Jisson

1
import pyexiv2 
from PIL import Image 

file_path = '/home/../img/a.JPG' 
metadata = pyexiv2.ImageMetadata(file_path) 
metadata.read() 
thumb = metadata.exif_thumbnail 
thumb.set_from_file(file_path) 
thumb.write_to_file('512_' + "a") 
thumb.erase() 
metadata.write() 

今、私は私のプロジェクトではEXIFデータに

5

を見ることができ、Phatchイメージインスペクタを使用して画像を開くには、私はあなたと同じ問題に会いました。 Googleで検索したところ、piexifのライブラリが見つかりました。それはPilowexifデータをサムネイルに保存するのに役立ちます。

あなたは、以下のソースコードを使用することができます。

from PIL import Image 
import piexif 
import StringIO 


file_path = '/home/me/img/a.JPG' 
im = Image.open(file_path) 

# load exif data 
exif_dict = piexif.load(im.info["exif"]) 
exif_bytes = piexif.dump(exif_dict) 

THUMB_SIZES = [(512, 512)] 
for thumbnail_size in THUMB_SIZES: 
    im.thumbnail(thumbnail_size, Image.ANTIALIAS) 
    thumbnail_buf_string = StringIO.StringIO() 
    # save thumbnail with exif data 
    im.save('512_' + "a", "JPEG", exif=exif_bytes) 

注:私は、Python 3.4とUbuntu 14.04

関連する問題