PyCMS:ICC 配置文件无法转换

问题描述 投票:0回答:1

现在我有一个关于智能手机摄像头色彩管理的项目,并且我无法在 pycms 中转换我自制的 icc 配置文件。它总是会引发错误

'PIL.ImageCms.PyCMSError: cannot build transform '
。现在,我很困惑,当我使用标准的icc配置文件时,转换总是成功的。

因此,我认为要么是我自制的icc Profile有问题,要么是代码有问题。所以我用 3 种方法为智能手机相机制作了 ICC 配置文件:

第一种方法:使用软件“色彩检查相机校准” 首先,我采样了来自不同智能手机的所有图片。然后我将“Tiff”中的“jpeg”图片转换并加载到软件中。最后,我得到了我的 icc 个人资料。

第二种使用软件“I1 Profiler”的方法和第三种方法使用“BaicColor input 6”也与第一种方法类似。

但是所有的 Icc 配置文件都无法在我的代码中进行转换。现在我不知道我的代码或 ICC 配置文件中的问题出在哪里。你能告诉我我的问题出在哪里吗?在我的 ICC 配置文件上还是在我的代码上?以下是我在Python3.7中的代码,在超链接中您还可以找到我的icc。在此处输入链接描述

import os
from PIL.ImageCms import *


# initialization the current working directory into a dictionary 
def init():
    current_dir = os.path.abspath(os.path.dirname(__file__))
    return {
        'honor6x': os.path.join(current_dir, 'icc_profile', 'honor6x.icc'),
        'honor7i': os.path.join(current_dir, 'icc_profile', 'honor7i.icc'),
        'huawei-p30pro': os.path.join(current_dir, 'icc_profile', 'huawei-p30pro.icc'),
        'iphone6s': os.path.join(current_dir, 'icc_profile', 'iphone6s.icc'),
        'iphone8': os.path.join(current_dir, 'icc_profile', 'iphone8.icc'),
        'iphonex': os.path.join(current_dir, 'icc_profile', 'iphonex.icc'),
        'samsung-s8': os.path.join(current_dir, 'icc_profile', 'samsung-s8.icc'),
        'sony-G8341': os.path.join(current_dir, 'icc_profile', 'sony-G8341.icc')
    }


# the main function to carry out the icc-profile retrieval with the input of the smartphone type,
# and correction the input photos through the icc-profile
def main():
    #my_phone = input('give me a type of smartphone:')
    #icc = get_icc(my_phone)
    #if not icc:
     #   return
    #print(icc)
    inputProfile = ImageCmsProfile(os.path.join('icc_profile', 'sRGB_IEC61966-2-1_no_black_scaling(v4).icc'))
    outputProfile = ImageCmsProfile(os.path.join('icc_profile', 'sRGB2014(v2.0.0).icc'))
    print(outputProfile)
    # input the new photo and transform it to the corrected photo through the icc-Profile
    my_photo = input('give me a photo of the smartphone:')
    im = Image.open(my_photo)


    im_converted = profileToProfile(im, inputProfile, outputProfile, renderingIntent=1)
    # after the transformation of the input photo, save the corrected photos as a target photo
    im_converted.save (f"{my_photo}_corrected.jpeg")

# search the input type smartphone with the relevant icc profile, if the input type in the dict and get its icc
# if not, print it
def get_icc(my_phone):
    if my_phone not in icc_dict:
        print(f'{my_phone} is not validated!')
    return icc_dict.get(my_phone)



if __name__ == '__main__':
    icc_dict = init()

    main()
python-3.x profile icc color-management
1个回答
0
投票

我也有同样的问题。有更新吗?

© www.soinside.com 2019 - 2024. All rights reserved.