如果icc_profile为空(PIL),则识别任何图像的颜色空间

时间:2018-06-01 10:41:13

标签: python image image-processing python-imaging-library

我有大量的图像,当我使用PIL读取它时,很多图像都有空的icc_profile。我检查icc配置文件的方式是:

from PIL import Image
img = Image.open('image.jpg')
icc = img.info.get('icc_profile', '')

即使icc_profile为空,有没有办法识别图像的颜色空间(最好使用PIL)?

1 个答案:

答案 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。如果稍后用户发现图像看起来太暗或暗,他们只能在其他颜色空间中查看图像,这可能会使图像看起来更饱和。