我有大量的图像,当我使用PIL读取它时,很多图像都有空的icc_profile。我检查icc配置文件的方式是:
from PIL import Image
img = Image.open('image.jpg')
icc = img.info.get('icc_profile', '')
即使icc_profile为空,有没有办法识别图像的颜色空间(最好使用PIL)?
答案 0 :(得分:1)
除了在ICC profile中查找色彩空间信息外,您还可以查看EXIF元数据标签。特别是EXIF标记ColorSpace(0xA001)表示sRGB等于1.根据this document,其他值不是标准值,但可能表示其他颜色空间。另一个有用的EXIF标记可能是InteropIndex(0x0001)。
你可以像这样检查这些标签:
from PIL import Image
img = Image.open('image.jpg')
def exif_color_space(img):
exif = img._getexif() or {}
if exif.get(0xA001) == 1 or exif.get(0x0001) == 'R98':
print ('This image uses sRGB color space')
elif exif.get(0xA001) == 2 or exif.get(0x0001) == 'R03':
print ('This image uses Adobe RGB color space')
elif exif.get(0xA001) is None and exif.get(0x0001) is None:
print ('Empty EXIF tags ColorSpace and InteropIndex')
else:
print ('This image uses UNKNOWN color space (%s, %s)' %
(exif.get(0xA001), exif.get(0x0001)))
此外,如果您的文件来自DCIM folder(如数码相机或智能手机中),Adobe RGB颜色空间可以通过名称从下划线开始(如_DSC
)或具有除JPG
(如JPE
)。
如果图像的色彩空间仍然未知,最安全的是假设sRGB。如果稍后用户发现图像看起来太暗或暗,他们只能在其他颜色空间中查看图像,这可能会使图像看起来更饱和。