[英]Pillow script results in image losing saturation / vibrance
我有一個 Python 腳本,它使用 Pillow 將圖像調整為 Instagram 大小的圖像,原始圖像的背景模糊。
前后圖像(均為 JPG):
https://app.box.com/s/jpv2mxlncp9871zvx9ygt0be4gf0zc9q
這僅僅是“后”JPG的function太小而無法反映原始圖像中的所有colors嗎? (Instagram 只允許最大 2048x2048 圖像,我的原始圖像是從 TIF 轉換而來的 JPG,它是從尼康數碼單反相機拍攝的 24.2 兆像素 RAW 圖像轉換而來的)。 也許這一切都在我的腦海中,但在我看來,“后”圖像已經失去了一些飽和度/活力(例如比較黃色的建築物和車燈)
有沒有人遇到過類似的問題? Pillow 中是否有一些默認模式會減少可用的 colors 的數量? 我正在考慮在我的腳本中添加一個額外的飽和步驟,但這似乎是一個 hack。
編輯:在上面的鏈接中添加了另一個之前/之后的圖像對。 我還意識到我可以輕松地共享腳本的源代碼(GitHub 存儲庫):
不同之處在於原始圖像包含一個“ICC 顏色配置文件” (以及其他),它沒有保存在 output 圖像中。
您可以使用exiftool
最輕松地看到這一點:
exiftool Mountains_Before.jpg | grep -i profile
或使用ImageMagick :
magick identify -verbose Mountains_Before.jpg | grep -A999 Profiles:
Output
Profiles:
Profile-8bim: 92 bytes
Profile-exif: 17796 bytes
Profile-icc: 560 bytes
Profile-iptc: 80 bytes
City[1,90]: 0x00000000: 254700 -%G
Created Date[2,55]: 2020-7-1
unknown[2,62]: 2020-06-30
unknown[2,63]: 21:11:26+00:00
unknown[2,0]: 4
Created Time[2,60]: 20:22:05-20:22
Profile-xmp: 9701 bytes
如果您從原始輪廓中剝離輪廓,您也會看到它,被洗掉並且更平坦:
magick Mountains_Before.jpg -strip NoProfile.jpg
你可以提取 ICC 配置文件,如果這種事情讓你興奮,你可以像這樣查看:
magick Mountains_Before.jpg profile.icc
如果你這樣做了,我想你可以像這樣將 BEFORE 圖像中的配置文件重新附加到 AFTER 圖像:
magick Mountains_After.jpg -profile profile.icc AfterWithProfile.jpg
關鍵詞:圖像處理,ImageMagick,配置文件,ICC配置文件,飽和度,飽和度,去飽和度,褪色。
正如Mark Setchell所指出的,這是一個保留圖像顏色配置文件的問題,這在 Pillow 中是可能的,首先通過在打開圖像后檢索配置文件:
image = Image.open('mycoolimage.jpg')
iccProfile = image.info.get('icc_profile')
iccBytes = io.BytesIO(iccProfile)
originalColorProfile = ImageCms.ImageCmsProfile(iccBytes)
當使用 Pillow 調用save
時,您可以傳遞一個 icc_profile:
image.save('outputimagename.jpg', icc_profile=originalColorProfile.tobytes())
(很明顯,我在這里對這兩個步驟之間的image
進行了其他操作。顯然其中一個或多個會導致 icc_profile 消失。)
這個答案也有助於構建這個解決方案。
我為那些有興趣查看這些添加結果的人添加了 Mountains_After_NEW.jpg。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.