JDK-8274735, JPEG compression in a TIFF container, openjdk/jdk/pull/7849

Michal Karm michal.babacek at gmail.com
Mon May 23 15:39:14 UTC 2022


Thanks for taking the time to explain it.

Inline...

On 5/20/22 19:50, Philip Race wrote:
> Identifying the intended color space of a JPEG is so much guesswork ..
> 
> and we've not had support for ARGB since JDK 10 which was the last release
> to contain the Sun/Oracle "closed" support for that (from Kodak!) and OpenJDK 
> NEVER had it.
> 
> See
> https://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/javax/imageio/metadata/doc-files/jpeg_metadata.html
> 
> Optional ColorSpace support: Handling of PhotoYCC (YCC), PhotoYCCA (YCCA), RGBA 
> and YCbCrA color spaces by the standard plugin, as described below, is dependent 
> on capabilities of the libraries used to interpret the JPEG data. Thus all 
> consequential behaviors are optional. If the support is not available when 
> decoding, the color space will be treated as unrecognized and the appropriate 
> default color space for the specified number of component channels may be used
> 
> So if you have ARGB you are in the lap of the Gods ..
> 

thx, I digested the content and I think I get it.

> I think before the latest change there was no default 4 component space, so you 
> got an exception,
> now there's something we default to assuming we are seeing ..

That is exactly the case. I would like a meaningful exception to be thrown
so as one knows that the data are being interpreted incorrectly though.

Something along these lines (tests included):

https://github.com/openjdk/jdk/pull/8846

Why in TIFF reader and not in JPEG decompressor: Both GIMP and ImageMagic can
create RGBA JPEG compressed TIFF without any warning for you, while producing
RGBA JPEG with these common tools is something I didn't encounter.


Cheers
Karm

> 
> -phil
> 
> On 5/20/22 7:07 AM, Brett Okken wrote:
>> JPEG support for RGB with transparency/alpha channel is pretty spotty.
>> https://stackoverflow.com/a/57626892/676877
>>
>> On Fri, May 20, 2022 at 8:12 AM Michal Karm <michal.babacek at gmail.com> wrote:
>>
>>     I stepped the flow in a debugger and I narrowed
>>     down the reproducer to a more focused, simpler
>>     description and test data:
>>
>>     https://github.com/Karm/dev-null/blob/main/jpegtiff/README.md
>>
>>     TL;DR:
>>
>>     JPEG compressed RGB image in TIFF with transparency makes
>>     the TIFF decoder to push 4 components data to the JPEG reader.
>>
>>     The JPEG reader wrongly guesses that the data is CMYK now (based on the
>>     number
>>     of components).
>>
>>     If the image is GRAYSCALE though, it ends up in Unsupported Image Type
>>     because JPEG reader doesn't try to guess it's CMYK.
>>
>>
>>     Solution...I don't know.
>>
>>     Would it make sense if I transform the data to the number of
>>     components the JPEG reader expects?
>>     All the necessary information is there in the TIFF metadata,
>>     e.g. it knows the space is RGB and not CMYK, it knows that there
>>     is a transparency saved with the tile.
>>
>>     THX for hints
>>
>>     Karm
>>
>>
>>     On 5/17/22 21:52, Philip Race wrote:
>>     > This could be a bug in the TIFF plugin.
>>     > Hard to say without debugging it.
>>     >
>>     > -phil.
>>     >
>>     >
>>     > On 5/17/22 7:04 AM, Michal Karm wrote:
>>     >> Hello,
>>     >>
>>     >> There used to be an Unsupported Image Type exception thrown
>>     >> when one wanted to decode a TIFF container with JPEG compressed image.
>>     >>
>>     >> That behavior has changed, there is no exception now, although the
>>     >> resulting image is incorrect.
>>     >>
>>     >> I outlined the details in this doc [1], including a small reproducer.
>>     >>
>>     >> The test image is not anything from a fuzzer, it's just me
>>     >> clicking Export As in GIMP.
>>     >>
>>     >> Thanks for feedback
>>     >>
>>     >> Cheers
>>     >> Karm
>>     >>
>>     >>
>>     >> [1]
>>     >>
>>     https://urldefense.com/v3/__https://github.com/Karm/dev-null/blob/main/jpegtiff/README.md__;!!ACWV5N9M2RV99hQ!Kw41ShsuTSfpVPMZFrXmdQ7ZETNdkLTk9Xd1NDWELvCXV0fyIqg4sXi5Z1aYfjMoG-5fS0gki8dnN8bQjSYM0g$
>>
>>     >>
>>     >>
>>     >> Karm Michal Babacek
>>     >>
>>     >
>>
>>
>>     Michal Karm Babacek
>>
>>     -- 
>>     Sent from my Hosaka Ono-Sendai Cyberspace 7
>>
> 


Michal Karm Babacek

-- 
Sent from my Hosaka Ono-Sendai Cyberspace 7



More information about the client-libs-dev mailing list