Search code examples
pythonrgbphotoshoppython-imaging-libraryimage-conversion

Conversion from CMYK to RGB with Pillow is different from that of Photoshop


I need to convert an image from CMYK to RGB in python. I used Pillow in this way:

img = Image.open('in.jpg')
img = img.convert('RGB')
img.save('out.jpg')

The code works, but if I convert the same image with Photoshop I have a different result as shown below:-

a

The only operation done in photoshop is to change method from CMYK to RGB. Why there is this difference between the two RGB images? It can be a color profile problem?


Solution

  • SOLVED

    The problem is that Pillow does not know the input ICC profile, while photoshop had one set as default.

    Photoshop use for

    CMYK: U.S. Web Coated (SWOP) v2

    RGB: sRGB IEC61966-2.1

    So I've solved in this way:

    img = Image.open('in.jpg')
    img = ImageCms.profileToProfile(img, 'USWebCoatedSWOP.icc', 'sRGB Color Space Profile.icm', renderingIntent=0, outputMode='RGB')
    img.save('out.jpg', quality=100)
    

    On Windows the profiles can be found (if installed) in these folders:

    C:\Windows\System32\spool\drivers\color\USWebCoatedSWOP.icc
    C:\Program Files (x86)\Common Files\Adobe\Color\Profiles\Recommended\USWebCoatedSWOP.icc
    C:\Program Files (x86)\Adobe\Acrobat DC\Resource\Color\Profiles\Recommended\USWebCoatedSWOP.icc
    
    C:\Windows\System32\spool\drivers\color\sRGB Color Space Profile.icm
    C:\Program Files (x86)\Common Files\Adobe\Color\Profiles\Recommended\sRGB Color Space Profile.icm
    C:\Program Files (x86)\Adobe\Acrobat DC\Resource\Color\Profiles\Recommended\sRGB Color Space Profile.icm