I ran the unit tests and I am getting a failure in StandardTestSuite - testEquals.
The reason for the failure is a change in ColorUtil (see 4/ lower). Would changing the test to no longer check for unequality between two returned Color objects be an option? Thanks, Peter > -----Original Message----- > From: Peter Coppens [mailto:[EMAIL PROTECTED] > Sent: Tuesday, October 10, 2006 9:32 PM > To: fop-dev@xmlgraphics.apache.org > Subject: Re: Including an sRGB color profile? > > > I finished(?) working on the somewhat modified items (1), (2) and (4) of > Jerememias' list. > > I plan to clean up to code a bit and then try to submit a patch (there > should be a first time for everything I guess :)) > > Here is an overview of what has been done - probably belongs in the patch > as > well, but if someone, despite the length of this post, decides to go > through > it anyway, an upfront red flag can be waved if needed, keeping me from > going > through the patch process..... > > > From the users point of view. > > The rgb-icc function is accepted as input for color properties of fo > elements and the generated PDF will include and refer to those color > profiles. Other renderers will use profile based converted sRGB values. > The > ICC profiles are loaded using the src attribute from the color-profile > element. The uri resolution relies on how the Java VM resolves color > profiles. > > A cmyk function accepting 4 arguments (values ranging from 0%-100% or > 0.0-1.0) is also available. The PDF renderer will generate DeviceCMYK > colors > based on the provided values, the other renderers will use a "standard" > cmyk-rgb conversion and generated rgb colors. > > > Implementation wise the following changes were done > > > org.apache.fop.fo.expr.PropertyParser > > 1/ > FunctionTable has two new functions, cmyk and rgb-icc linked to two new > classes CMYKcolorFunction and ICCcolorFunction > > 2/ > parsePrimaryExpr recognizes functions that return a negative number from > the > nbArgs as variable argument functions. Those are parsed with a new method, > parseVarArgs > > org.apache.fop.fo.expr.CMYKColorFunction > > New function class for the cmyk function > > org.apache.fop.fo.expr.ICCColorFunction > > New function class for the rgb-icc function. It is a somewhat peculiar > function class for two reasons. > > First, it returns an negative number for nbArgs (flagging a variable > number > of arguments function). > > Second its eval method returns a string that contains a fop-rgb-icc > function > call. The arguments for this new function are the same as the one of rgb- > icc > with the exception of the fifth, which is an extra argument that contains > the src attribute for the color profile (from > /root/declarations/color-profile/@src) > > An alternative suggested by Jeremias was to introduce a color context > tracking the mapping between ICC profile name and src. Certainly a more > elegant approach but it would require more classes to be touched something > I > was reluctant to do (this being my first attempt to a fop contribution) > > > org.apache.fop.fo.pagination.Declarations > > Added a new method > public ColorProfile getColorProfile(String cpName) > > org.apache.fop.fo.pagination.ColorProfile > > Added a new method > public String getSrc() > > > org.apache.fop.util.ColorUtil > > 1/ > Added a static member referring to a/the Log object > > 2/ > Added a static (synchronized) Map, colorSpaceMap, mapping color profile > src's to ICC_ColorSpace instances. > > 3/ > parseColorString > > Now also recognizes fop-rgb-icc and cmyk functions invoking > parseAsFopRgbIcc > or parseAsCMYK. > > 4/ > Removed cloning of the Color object before returning from parseColorString > (has a TODO in the current code) > > 5/ > Added > private static Color parseAsFopRgbIcc(String value) > throws PropertyException > > If the color profile src (5th argument) is not available in the > colorSpaceMap cache, an attempt is made to create an ICC_Profile and > associated ICC_ColorSpace based on the src. If successful, the ColorSpace > is added to the cache, if not the fallback rgb values are used to create > an > rgb based color. If an ICC_ColorSpace is available an RgbIccColor (new > class) object is created. > > 6/ > Added > private static Color parseAsCMYK(String value) > throws PropertyException > > Parses cmyk arguments and creates a Color from a CMYKColorSpace color > space. > > > 7/ > colorTOsRGBString > > Changed to recognize and handle cmyk and rgb-icc colors. Perhaps the name > of > the function should be changed? > > > > org.apache.fop.util.CMYKColorSpace > > Implemented > public float[] toRGB(float[] colorvalue) > > > org.apache.fop.util.RgbIccColor > > New Color class keeping track of the rgb-icc arguments and color profile > src > information. > > > > org.apache.fop.pdf.PDFColor > > 1/ > > Added a private RgbIccColor member. This is probably the least elegant > change in this patch. > > There is something I do not understand with the way PDFColorSpace, > PDFDeviceColorSpace and PDFPathPaint are used. PDFPathPaint has a > PDFDeviceColorSpace member while for me and at least at first sight it > would > make more sense to use a PDFColorSpace member in stead. Changing that > would > however result in quite a few changes lots of which would occur in code I > have no clue when it would be called. > > The alternative approach I took is to add an RgbIccColor member which is > only filled in when the PDFColor is created from an RgbIccColor source in > PDFColor(java.awt.Color col). > > Eventually, perhaps when svg rgb-icc and cmyk support is added, this will > have to be dealt with. > > Bottom line is I would prefer to see these first set of changes rolled in > before starting to add changes to code not well understood. > > 2/ > public PDFColor(java.awt.Color col) > > Recognize Color instances based on CMYK or RgbIccColor and store relevant > information > > 3/ > public String getColorSpaceOut(boolean fillNotStroke) > > Recognize RgbIccColor based PDFColor instances and act accordingly > > > > org.apache.fop.render.pdf.PDFRenderer > > protected void setColor(Color col, boolean fill, StringBuffer pdf) > > When color is an RgbIccColor instance the ICC profile is added to the pdf > when needed. > > > Peter > > > > Peter Coppens wrote: > > > > Jeremias > > > > That is certainly a good start in terms of information to digest. > > > > I'll give it some time to sink in, and I'll try to browse through the > code > > a bit the coming week to see how familiar I can get with it in that > time. > > > > Thanks, > > > > Peter > > > > > > > > > > Jeremias Maerki-2 wrote: > >> > >> Ok, so here's a rough overview what needs to be done. No guarantee for > >> completeness or accuracy. > >> > >> 1. Implementation of the rgb-icc() function. > >> > >> See also: > >> http://www.antennahouse.com/xslfo/axf4-extension.htm#rgb-icc > >> http://www.renderx.com/reference.html#Color_Specifiers > >> > >> Whether the #CMYK pseudo-profile is really needed or if ICC colors are > >> sufficient, I cannot say at this time. In the end, the function needs > to > >> generate a java.awt.Color (or descendant if necessary). I'm not sure if > >> the rgb-icc() function can sufficiently be mapped into FOP's function > >> infrastructure because it uses a non-constant number of parameters. > >> > >> 2. Internal representation of colors > >> > >> Thanks to Max Berger FOP already uses java.awt.Color throughout the > >> layout engine so we don't have to worry much anymore how the color > >> information is transported to the renderers. However, I can't tell if > >> Java's color infrastructure is up to the task of transporting the color > >> information as we need it for CMYK support. > >> > >> 3. org.apache.fop.image package > >> > >> This package is in need of a redesign for various reasons, one of them > >> being that it doesn't use RenderedImage/BufferedImage internally to > >> represent decoded images. Instead it uses byte arrays with decoded RGB > >> data. In order to properly support CMYK not only for JPEGs, the > >> refactoring will need to be done if we want a clean solution. > >> > >> 4. Improving the renderers to implement CMYK > >> > >> I assume the PDF renderer is the most important here. It needs to be > >> able to deal with the additional color types. But the other renderers > at > >> least shouldn't fail when they encounter non-RGB data. The PDF library > >> is another place to look out for color stuff (like the PDFColor class). > >> PDF profiles like PDF/A-1b and PDF/X-3:2003 will also need to be > >> verified to work again after CMYK support is there. Having CMYK support > >> enables the implementation of other PDF/X standards. > >> > >> 5. SVG support > >> > >> As XSL-FO, SVG is primarily operating in the sRGB space, but has > >> extensions for ICC color (icc-color() function in SVG). I'm not sure > >> about the status of ICC color support in Batik, so this has to be > >> investigated. At any rate, there will need to be some changes to handle > >> CMYK requirements for SVG graphics. Otherwise, you will only get > >> RGB/sRGB colors in the PDF. > >> > >> That's quite a bit to do. I guess it would make sense to start a Wiki > >> page to write down all the info around the topic, gather knowledge, to > >> track progress and to coordinate. > >> > >> As for estimates, that's actually quite difficult at this time, without > >> further investigation. Point 1 shouldn't be all that hard, maybe a day > >> or so. Point 2 is probably ignorable except if AWT cannot hold the > color > >> information like we need it. Point 3 is larger, probably 4 to 5 days. > It > >> will take some more investigation and design. I've got a idea how this > >> should look like but so far I haven't written it down. I've only done > >> some requirements gathering on > >> http://wiki.apache.org/xmlgraphics-fop/ImageSupport. > >> Point 4 is probably not that difficult but a lot of tedious work which > >> involves a lot of testing and reading specifications. I assume it's > >> another 3 to 4 days. Point 5 is difficult to estimate at this time. > >> > >> Add at least a couple of days if you're not familiar with color > handling > >> and the PDF specification. > >> > >> The good news is that all this doesn't require knowledge about the > >> layout engine which simplifies getting into this a lot!!! But of > course, > >> there's still a lot to learn about colors, PDF and PDF profiles. > >> > >> Point 3 is on my middle-term radar, as is the rest but with lower > >> priority. So it's most likely I can help with the image package, but > not > >> immediately. Ideas and guidance, sure, but not code at this time. > >> > >> On 20.09.2006 22:48:20 Peter Coppens wrote: > >>> > >>> FOP fans, > >>> > >>> I could also use cmyk support in fop. My options are to buy some xsl > fo > >>> implementation that supports it or trye to contribute to fop (assuming > >>> the > >>> community lets me) > >>> > >>> Could someone give me a very rough estimate on how much work it would > >>> require, including getting acquainted with the fop architecture. > >>> > >>> Thanks, > >>> > >>> Peter > >>> > >>> > >>> > >>> Jeremias Maerki-2 wrote: > >>> > > >>> > > >>> > On 31.03.2006 21:48:43 Max Berger wrote: > >>> >> I know I have no vote in this, but I do disagree. > >>> > > >>> > Every opinion is always welcome. > >>> > > >>> >> 1) I still believe that PDF is a print medium and should therefore > >>> >> default to CMYK colorspace. If supported correctly by software, the > >>> >> colors should show up right on the screen. > >>> > > >>> > One use case of PDF is as a print medium, but it's not the only one. > >>> If > >>> > we're talking about producing documents for offset printing, then > yes, > >>> I > >>> > agree with you. Fact is that most PDF-producing software packages I > >>> know > >>> > produce RGB (either uncalibrated DeviceRGB or sRGB). This applies to > >>> > OpenOffice, Acrobat Distiller with its default settings, > GhostScript. > >>> > The list probably goes on. > >>> > > >>> > Supporting CMYK in FOP means some additional work which I don't have > >>> > time for (and don't really have a need myself). The client that has > >>> > asked me to implement PDF/A-1 is happy with sRGB since it's only > about > >>> > patent documents. If someone (you?) implements an option to generate > a > >>> > full CMYK PDF, then I'm all for adding that since it has been > >>> requested > >>> > a number of times. But doing that per default would be a change in > >>> > long-standing standard FOP behaviour which I don't support. > >>> > > >>> >> 2) If you want to embedd the sRGB profile, I would recommend using > >>> the > >>> >> profiles found at the International Color Consortium: > >>> >> http://www.color.org > >>> >> > >>> >> especially > >>> >> > >>> >> http://www.color.org/srgbprofiles.html > >>> >> > >>> >> unfortunately I was unable to find the exact licensing terms. > >>> > > >>> > That's exactly why I didn't use them. Licensing terms are not clear. > >>> On > >>> > the other side, Adobe & Co. are distributing the sRGB profile from > >>> > srgb.com, not from color.org. It's also unclear to me which of the > two > >>> > variants (withBPC/noBPC) would have to be used. > >>> > > >>> >> just my 2 cts. > >>> >> > >>> >> Max > >>> >> > >>> >> > >>> >> Jeremias Maerki wrote: > >>> >> > I'm near the end of my work for basic PDF/A-1b support. PDF/A-1b > >>> >> > mandates the use of an OutputIntent if uncalibrated color spaces > >>> (like > >>> >> > DeviceRGB) are used. That means that in each PDF which has PDF/A- > 1b > >>> >> > enabled an ICC color profile will be embedded and used in the > >>> >> > OutputIntent object. Since we don't support ICC-based colors, > yet, > >>> I've > >>> >> > hard-coded sRGB into PDF/A-1b support (XSL-FO supports sRGB and > >>> >> > ICC colors, XSL 1.0, 5.9.9). But that means I need to embed the > >>> sRGB > >>> >> > IEC61966-2.1 color profile. The JRE provides such a color profile > >>> but > >>> >> > does this is a weird way: the profile alone is about 140KB. > That's > >>> why > >>> >> > I'd like to use the standard sRGB profile from HP. Info on that > >>> file: > >>> >> > > >>> >> > Obtained from: http://www.srgb.com/usingsrgb.html > >>> >> > > >>> >> > The file "sRGB Color Space Profile.icm" is: > >>> >> > Copyright (c) 1998 Hewlett-Packard Company > >>> >> > > >>> >> > To anyone who acknowledges that the file "sRGB Color Space > >>> Profile.icm" > >>> >> > is provided "AS IS" WITH NO EXPRESS OR IMPLIED WARRANTY: > >>> >> > permission to use, copy and distribute this file for any purpose > is > >>> >> hereby > >>> >> > granted without fee, provided that the file is not changed > >>> including > >>> >> the HP > >>> >> > copyright notice tag, and that the name of Hewlett-Packard > Company > >>> not > >>> >> be > >>> >> > used in advertising or publicity pertaining to distribution of > the > >>> >> software > >>> >> > without specific, written prior permission. Hewlett-Packard > >>> Company > >>> >> makes > >>> >> > no representations about the suitability of this software for any > >>> >> purpose. > >>> >> > > >>> >> > I need to get the license approved by the VP legal affairs but I > >>> don't > >>> >> > expect any problems. > >>> >> > > >>> >> > Anyone against me including this color profile (3144 bytes, > >>> >> uncompressed) > >>> >> > in the org.apache.fop.pdf package? > >>> >> > > >>> >> > Jeremias Maerki > >>> > > >>> > > >>> > > >>> > Jeremias Maerki > >>> > > >>> > > >>> > > >>> > >>> -- > >>> View this message in context: > >>> http://www.nabble.com/Including-an-sRGB-color-profile-- > tf1373500.html#a6416371 > >>> Sent from the FOP - Dev mailing list archive at Nabble.com. > >> > >> > >> > >> Jeremias Maerki > >> > >> > >> > > > > > > -- > View this message in context: http://www.nabble.com/Including-an-sRGB- > color-profile--tf1373500.html#a6743661 > Sent from the FOP - Dev mailing list archive at Nabble.com.