From 7d77583a830b0c847d2c3edbed60d54131a523a4 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 22 Sep 2017 00:15:06 +1000 Subject: [PATCH] DeduceJpegColorSpace --- .../Jpeg/GolangPort/OrigJpegDecoderCore.cs | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegDecoderCore.cs index 428d87ee60..52c60dea20 100644 --- a/src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegDecoderCore.cs @@ -818,34 +818,31 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.GolangPort { switch (this.ComponentCount) { - case 1: return JpegColorSpace.GrayScale; - case 3: return this.IsRGB() ? JpegColorSpace.RGB : JpegColorSpace.YCbCr; - case 4: - - if (!this.adobeTransformValid) + case 1: + return JpegColorSpace.GrayScale; + case 3: + if (!this.isAdobe || this.adobe.ColorTransform == OrigJpegConstants.Adobe.ColorTransformYCbCr) { - throw new ImageFormatException( - "Unknown color model: 4-component JPEG doesn't have Adobe APP14 metadata"); + return JpegColorSpace.YCbCr; } - // See http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe - // See https://docs.oracle.com/javase/8/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html - // TODO: YCbCrA? - if (this.adobeTransform == OrigJpegConstants.Adobe.ColorTransformYcck) + if (this.adobe.ColorTransform == OrigJpegConstants.Adobe.ColorTransformUnknown) { - return JpegColorSpace.Ycck; + return JpegColorSpace.RGB; } - else if (this.adobeTransform == OrigJpegConstants.Adobe.ColorTransformUnknown) + + break; + case 4: + if (this.adobe.ColorTransform == OrigJpegConstants.Adobe.ColorTransformYcck) { - // Assume CMYK - return JpegColorSpace.Cmyk; + return JpegColorSpace.Ycck; } - goto default; - - default: - throw new ImageFormatException("JpegDecoder only supports RGB, CMYK and Grayscale color spaces."); + return JpegColorSpace.Cmyk; } + + throw new ImageFormatException($"Unsupported color mode. Max components 4; found {this.ComponentCount}." + + "JpegDecoder only supports YCbCr, RGB, YccK, CMYK and Grayscale color spaces."); } private Image PostProcessIntoImage()