Update: Disregard diese Antwort ist @Christoffer's answer die richtige. Wie sich herausstellte, hat load
keine Konvertierungen vorgenommen, das ICC-Profil wurde gerade woanders gespeichert.
Ich glaube nicht, entweder dieser Operationen das Farbprofil ändern sich, aber das Wandlungsrecht auf load
getan wird. Nach dem Öffnen this sample image mit einer aktuellen Version von PIL (1.1.7 unter Windows XP), wird sofort in RGB umgewandelt:
>>> from PIL import Image
>>> Image.open('Flower-sRGB.jpg')
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=600x450 at 0xD3D3F0>
Wenn ich versuche, es so, wie es (ohne etwas zu ändern) ist zu retten zurück, einig Qualität ist verloren. Wenn ich ein verlustfreies Format OTOH verwenden, sieht das resultierende Bild gut zu mir:
>>> im = Image.open('Flower-sRGB.jpg')
>>> im.save("Flower-RBG.jpg")
>>> im.save("Flower-RBG.png")
Der Versuch, das resultierende Bild zurück zu sRGB konvertiert hat nicht funktioniert:
>>> im = Image.open('Flower-sRGB.jpg').convert('CMYK')
>>> im
<PIL.Image.Image image mode=CMYK size=600x450 at 0xD73F08>
>>> im.save("Flower-CMYK.png")
>>> im = Image.open('Flower-sRGB.jpg').convert('sRGB')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\PIL\Image.py", line 702, in convert
im = im.convert(mode, dither)
ValueError: conversion from RGB to sRGB not supported
Ich glaube, in sRGB Speichern würde benötigen Sie eine externe Bibliothek, wie pyCMS oder LittleCMS. Ich habe sie nicht selbst ausprobiert, aber hier ist eine tutorial (mit dem letzteren Tool), die vielversprechend aussieht. Schließlich, hier ist eine discussion thread über das gleiche Problem, das Sie konfrontiert sind (das Farbprofil intakt beim Laden/Speichern), hoffentlich kann es Ihnen einige weitere Hinweise geben.
Haben Sie sich den Patch angesehen, der in der ersten Antwort der verlinkten Diskussion erwähnt wurde? Es ist notwendig, dass die Farbprofilerhaltung funktioniert, nur das Aktualisieren der PIL-Version ist nicht genug (in meiner Antwort unten verwendete ich auch 1.1.7 und hatte das gleiche Problem). – mgibsonbr
@mgibsonbr Wie ich dann sehen kann sind laut der Readme-Datei im Hack von Florian Hoech keine weiteren Bibliotheken nötig. Und in 1.1.7 sollte der Hack zu einem Feature nach http://hg.effbot.org/pil-117/commits/03e996c3b271fd3dabb008a8c694b82e3e6c5917 – Christoffer