2013-06-12 18 views
3

調整大小,它會銷燬與圖像關聯的exif數據, 如何保存它。當我嘗試使用PIL調整(縮略圖)圖像的大小時,如何保持圖像的exif數據使用PIL

我調整圖像的大小並將其作爲圖像緩衝區上傳到雲端。

file_path = '...' 
file_name = '...' 
im = Image.open(file_path) 
size =(512,521) 
im.thumbnail(size, Image.ANTIALIAS) 
thumbnail_buf_string = StringIO.StringIO() 
file_save_extension = 'JPEG' 
im.save(thumbnail_buf_string, format=file_save_extension) 
upload_to_cloud('512_' + file_name , thumbnail_buf_string.getvalue()) 

調整大小的圖像沒有exif數據。

回答

4

注意:我還沒有自己做過,但據我所知,PIL只允許讀取exif標籤,但不能寫入它們。您可能需要使用gexiv2或pyexiv2將標籤寫入縮略圖。

更新:我很好奇,並嘗試它自己:D 如果我得到你的權利,你只是想複製元數據,無需進一步修改。

這仍然是原油,但似乎工作:

import os 
import Image 
import pyexiv2 

fp = '/home/klaus/workspace' 
fn = 'img_2380.jpg' 

full_path = os.path.join(fp, fn) 
print full_path 

im = Image.open(full_path) 
size = 512, 512 
im.thumbnail(size, Image.ANTIALIAS) 
im.save('bla.jpg', 'JPEG') 

oldmeta = pyexiv2.ImageMetadata(full_path) 
oldmeta.read() 
# read metadata of the original file 

newmeta = pyexiv2.ImageMetadata('bla.jpg') 
newmeta.read() 
# read metadata of the new file 
# yes, there aren't any, but this is crucial! 
# you need this class as the target for copying! 

oldmeta.copy(newmeta) 

newmeta.write() 
# don't forget to write the data to the new file 

順便說一句:謝謝你的有趣的問題!

+0

聽起來是真的,我試過pyexiv2 http://stackoverflow.com/a/17059383/658976,但我需要使用imagebuffer。 – Jisson

+0

我安裝了gexiv2,並且可以編輯exif數據,但是如何編輯內存中字符串圖像的編輯exif。例如:im.save(thumbnail_buf_string,format = file_save_extension) – Jisson

+0

你是賴特,有沒有辦法將原始圖像的exif數據設置爲調整大小而不保存第二張光盤?意味着將exif設置爲調整大小的圖像本身的圖像實例。如果不行,我認爲只有這樣才能按照你的建議去做,謝謝 – Jisson

相關問題