From 6d062cc49b86e6b1c33f6dd5fabaa659953937a0 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Wed, 25 Feb 2015 14:36:39 +0100 Subject: [PATCH] Clean up + notes for ICC profile sanitizing. --- .../imageio/color/ICCProfileSanitizer.java | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/color/ICCProfileSanitizer.java b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/color/ICCProfileSanitizer.java index cf2dc8ac..0156c5ec 100644 --- a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/color/ICCProfileSanitizer.java +++ b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/color/ICCProfileSanitizer.java @@ -5,7 +5,7 @@ import com.twelvemonkeys.lang.SystemUtil; import java.awt.color.ICC_Profile; /** - * ProfileCleaner. + * ICCProfileSanitizer. * * @author Harald Kuhr * @author last modified by $Author: harald.kuhr$ @@ -23,13 +23,41 @@ interface ICCProfileSanitizer { // TODO: Allow user-specific strategy selection, should heuristics not work..? // -Dcom.twelvemonkeys.imageio.color.ICCProfileSanitizer=com.foo.bar.FooCMSSanitizer + // TODO: Support for explicit Java 7 settings: sun.java2d.cmm.kcms.CMM + // (the CMSManager was changed from using direct class to ServiceProvider in Java 8, + // so the class names/interfaces are different). + + // Here's the evolution of Java Color Management: + + // Java 6: + // sun.awt.color.CMM (as the one and only) + + // Java 7: + // sun.java2d.cmm.CMSManager (using default sun.java2d.cmm=sun.java2d.cmm.kcms.CMM) + // sun.java2d.cmm.PCMM + // sun.java2d.cmm.kcms.CMM implements PCMM (similar to Java 6 CMM) + // sun.javard.cmm.lcms.LCMS implements PCMM + + // Java 8: + // sun.java2d.cmm.CMSManager (using default sun.java2d.cmm=sun.java2d.cmm.lcms.LcmsServiceProvider) + // sun.java2d.cmm.CMMServiceProvider (getModule() method, that returns PCMM) + // sun.java2d.cmm.PCMM + // sun.java2d.cmm.kcms.KcmsServiceProvider + // sun.java2d.cmm.kcms.CMM implements PCMM (similar to Java 6 CMM) + // sun.java2d.cmm.lcms.LcmsServiceProvider + // sun.java2d.cmm.lcms.LCMS implements PCMM + + // TODO: Consider a different option, invoking CMSManager.getModule() through reflection to get actual used instance + // Default to using a NullSanitizerStrategy on non-Sun/Oracle systems? + ICCProfileSanitizer instance; // Explicit System properties - if ("sun.java2d.cmm.kcms.KcmsServiceProvider".equals(System.getProperty("sun.java2d.cmm")) && SystemUtil.isClassAvailable("sun.java2d.cmm.kcms.CMM")) { + String cmmProperty = System.getProperty("sun.java2d.cmm"); + if ("sun.java2d.cmm.kcms.KcmsServiceProvider".equals(cmmProperty) && SystemUtil.isClassAvailable("sun.java2d.cmm.kcms.CMM")) { instance = new KCMSSanitizerStrategy(); } - else if ("sun.java2d.cmm.lcms.LcmsServiceProvider".equals(System.getProperty("sun.java2d.cmm")) && SystemUtil.isClassAvailable("sun.java2d.cmm.lcms.LCMS")) { + else if ("sun.java2d.cmm.lcms.LcmsServiceProvider".equals(cmmProperty) && SystemUtil.isClassAvailable("sun.java2d.cmm.lcms.LCMS")) { instance = new LCMSSanitizerStrategy(); } // Default for Java 1.8+ or OpenJDK 1.7+ (no KCMS available)