【问题标题】:Changing colors when jpg image is opened打开 jpg 图像时更改颜色
【发布时间】:2017-06-26 23:59:05
【问题描述】:

我首先将这张图片保存到我的本地机器:http://imgur.com/w3uQ9Ra

然后我尝试用这段代码打开并显示它:

from PIL import Image
img = Image.open('gipsy1.jpg')
img.show()

show 显示的图像(或保存到新文件中)与原始文件略有不同,可以在这里查看:http://imgur.com/9TAPiqx。有什么办法可以避免吗?

关于我的环境的一些信息:

  • Python 2.7.10(默认,2017 年 2 月 7 日,00:08:15)\n[GCC 4.2.1 兼容 Apple LLVM 8.0.0 (clang-800.0.34)]
  • 枕头 4.1.1
  • Mac OS Sierra 10.12.5 (16F73)

【问题讨论】:

  • 这可能是由于 jpg 文件格式使用的有损压缩。如果您改用无损格式(例如 png)会发生什么?
  • 如果你把它保存到一个新文件,那么它会被重新压缩,保存的文件将与原始文件不同。没有办法解决这个问题。但是,我不明白当它由img.show() 显示时,它的不同是什么意思。你把它和什么比较?
  • @SiHa,它们在视觉上是不同的。原始文件中的颜色更加鲜艳。看起来对比有些变化。差别不大,但最终用户抱怨它。
  • @Kevin,刚刚在这里测试过。同样的问题,相同的图像转换为 png 几乎大 4 倍。 =/
  • 两张截图在我看来差不多。会不会是最终用户的显示器校准不好?两台显示器可能以完全不同的方式显示相同的颜色。

标签: python python-2.7 pillow


【解决方案1】:

郑重声明:此图像使用 ICC Display P3 空间,该空间仅在 Apple 新产品和其他一些高端显示器上受支持。如果我们强制 ICC 使用 sRGB,我们会得到更好的结果。

以下代码可以正常工作:

from PIL import Image
img = Image.open('gipsy1.jpg')
import tempfile
from PIL import ImageCms
icc = tempfile.mkstemp(suffix='.icc')[1]
with open(icc, 'w') as f:
f.write(img.info.get('icc_profile'))
srgb = ImageCms.createProfile('sRGB')
img = ImageCms.profileToProfile(img, icc, srgb)
img.save('new_srgb_gipsy1.jpg')

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2017-08-22
    相关资源
    最近更新 更多