PyCMS: I CC Profil НЕ МОЖЕТ преобразовать - PullRequest
1 голос
/ 29 января 2020

Теперь у меня есть проект по управлению цветом для камеры смартфона, и у меня есть проект, который я не могу преобразовать в самодельный профиль i cc в pycms. Вызывает всегда ошибку 'PIL.ImageCms.PyCMSError: cannot build transform '. Теперь я очень запутался, когда я использую стандартный профиль i cc, преобразование всегда успешно.

Поэтому я считаю, что проблема в моем самодельном профиле i cc или что-то не так с кодами. Итак, я сделал свой профиль I CC для камеры смартфона тремя способами:

Первый метод: с программным обеспечением «калибровка камеры с помощью цветовой проверки» Во-первых, я отобрал все фотографии с разных смартфонов. А потом я преобразовал фотографии «jpeg» в «Tiff» и загрузил их в программное обеспечение. Наконец, я получаю свой профиль i cc.

Второй метод с программным обеспечением «I1 Profiler» и третий метод с «BaicColor input 6» также похожи на первый метод.

Но весь профиль I cc не может трансформироваться в мой код. Теперь я не знаю, где проблема в моем коде или в моем профиле I CC. Не могли бы вы сказать мне, где моя проблема? на моем профиле I CC ИЛИ на моем коде? ниже приведен мой код в Python3 .7, и в гиперссылках вы также найдете мой i cc. введите описание ссылки здесь

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()
...