Danke für die Spezifikation link martineau, ich habe ein paar PIL
Code zusammen mit Funktionen, die das Vorhandensein eines Adobe RGB ICC-Profils innerhalb einer Image
erkennen, und wandle den Farbraum in sRGB.
(Ich habe diese verwendet, um Django einfache Thumbnails zu erstellen Prozessorfunktion):
%Vor%Ich hatte das gleiche Problem, ich habe alle Antworten getestet und im letzten Bild die falsche Farbe bekommen. @DrMeers Alle Matrizen, die ich ausprobiert habe, gaben ein falsches Ergebnis in Rot und Schwarz, also hier ist meine Lösung:
Der einzige Weg, den ich herausgefunden habe, ist das Profil aus dem Bild zu lesen und mit ImageCms zu konvertieren.
%Vor%Ich denke, diese Methode kann für jedes Farbprofil verwendet werden, aber nicht getestet.
Um dies selbst zu programmieren, könnten Sie Pixel im AdobeRGB-Farbraum in CIE XYZ konvertieren und dann in sRGB konvertieren. PIL image
-Objekte haben eine Methode namens convert()
mit der Fähigkeit, eine allgemeine Matrixtransformation auf alle Pixel in einem Bild anzuwenden (siehe Abschnitt auf convert in der Online-Dokumentation des PIL-Image-Moduls - beachten Sie das Beispiel mit den Matrixwerten, die für den Übergang von RGB zu XYZ benötigt werden. .
Abschnitt 4.3.4 in der AdobeRGB1998 .pdf Spezifikation zeigt eine Matrix zur Umwandlung von XYZ in RGB.
Ich bin mir nicht sicher, wie ich den Farbraum von JPG-Bildern erkennen kann. Ich erinnere mich daran, etwas über ICC-XML-Profile gelesen zu haben, die am Ende der Datei angehängt wurden (und ein Problem, das bei mehr als einem Problem auftrat), aber ich kann nicht für seine Gültigkeit bürgen. Der Wikipedia-Artikel über das JPEG-Dateiformat sagt, dass Profile eingebettet sind.
Tags und Links python image-processing python-imaging-library jpeg color-profile