#621 Don't add ICC profile for default gray images

This commit is contained in:
Harald Kuhr
2021-08-31 22:16:08 +02:00
parent aa030f526c
commit 105a1ee466
4 changed files with 62 additions and 3 deletions
@@ -32,6 +32,7 @@ package com.twelvemonkeys.imageio.plugins.tiff;
import com.twelvemonkeys.image.ImageUtil;
import com.twelvemonkeys.imageio.ImageWriterBase;
import com.twelvemonkeys.imageio.color.ColorSpaces;
import com.twelvemonkeys.imageio.metadata.Directory;
import com.twelvemonkeys.imageio.metadata.Entry;
import com.twelvemonkeys.imageio.metadata.tiff.Rational;
@@ -849,9 +850,11 @@ public final class TIFFImageWriter extends ImageWriterBase {
else {
entries.put(TIFF.TAG_SAMPLES_PER_PIXEL, new TIFFEntry(TIFF.TAG_SAMPLES_PER_PIXEL, numBands));
// Note: Assuming sRGB to be the default RGB interpretation
// Embed ICC profile if we have one that:
// * is not sRGB (assuming sRGB to be the default RGB interpretation), and
// * is not gray scale (assuming photometric either BlackIsZero or WhiteIsZero)
ColorSpace colorSpace = colorModel.getColorSpace();
if (colorSpace instanceof ICC_ColorSpace && !colorSpace.isCS_sRGB()) {
if (colorSpace instanceof ICC_ColorSpace && !colorSpace.isCS_sRGB() && !ColorSpaces.isCS_GRAY(((ICC_ColorSpace) colorSpace).getProfile())) {
entries.put(TIFF.TAG_ICC_PROFILE, new TIFFEntry(TIFF.TAG_ICC_PROFILE, ((ICC_ColorSpace) colorSpace).getProfile().getData()));
}
}
@@ -554,6 +554,28 @@ public class TIFFImageWriterTest extends ImageWriterAbstractTest<TIFFImageWriter
}
}
@Test
public void testWriteGrayNoProfile() throws IOException {
ImageWriter writer = createWriter();
FastByteArrayOutputStream bytes = new FastByteArrayOutputStream(512);
try (ImageOutputStream output = ImageIO.createImageOutputStream(bytes)) {
writer.setOutput(output);
writer.write(new BufferedImage(10, 10, BufferedImage.TYPE_BYTE_GRAY));
}
try (ImageInputStream input = ImageIO.createImageInputStream(bytes.createInputStream())) {
ImageReader reader = ImageIO.getImageReaders(input).next();
reader.setInput(input);
TIFFImageMetadata metadata = (TIFFImageMetadata) reader.getImageMetadata(0);
Directory ifd = metadata.getIFD();
assertNull("Unexpected ICC profile for default gray", ifd.getEntryById(TIFF.TAG_ICC_PROFILE));
}
}
@Test
public void testWriteParamJPEGQuality() throws IOException {
ImageWriter writer = createWriter();
@@ -583,7 +605,7 @@ public class TIFFImageWriterTest extends ImageWriterAbstractTest<TIFFImageWriter
// Read original LZW compressed TIFF
IIOImage original;
try (ImageInputStream input = ImageIO.createImageInputStream(getClass().getResource("/tiff/a33.tif"))) {
try (ImageInputStream input = ImageIO.createImageInputStream(getClassLoaderResource("/tiff/a33.tif"))) {
ImageReader reader = ImageIO.getImageReaders(input).next();
reader.setInput(input);