From f10e03770c9702b3ee3bcc2ccdb78691f389c1a3 Mon Sep 17 00:00:00 2001 From: Nigel Tao Date: Fri, 13 Feb 2015 18:09:21 +1100 Subject: [PATCH] image/jpeg: support decoding CMYK and YCbCrK images. The new testdata was created by: convert video-001.png -colorspace cmyk video-001.cmyk.jpeg video-001.cmyk.jpeg was then converted back to video-001.cmyk.png via the GIMP. ImageMagick (convert) wasn't used for this second conversion because IM's default color profiles complicates things. Fixes #4500. Change-Id: Ibf533f6a6c7e76883acc493ce3a4289d7875df3f Reviewed-on: https://go-review.googlesource.com/4801 Reviewed-by: Rob Pike --- src/image/decode_test.go | 1 + src/image/jpeg/reader.go | 259 ++++++++++++++++++++----- src/image/jpeg/scan.go | 19 +- src/image/testdata/video-001.cmyk.jpeg | Bin 0 -> 19477 bytes src/image/testdata/video-001.cmyk.png | Bin 0 -> 25439 bytes 5 files changed, 221 insertions(+), 58 deletions(-) create mode 100644 src/image/testdata/video-001.cmyk.jpeg create mode 100644 src/image/testdata/video-001.cmyk.png diff --git a/src/image/decode_test.go b/src/image/decode_test.go index 8dee57ee46..e88bfdaaae 100644 --- a/src/image/decode_test.go +++ b/src/image/decode_test.go @@ -32,6 +32,7 @@ var imageTests = []imageTest{ // JPEG is a lossy format and hence needs a non-zero tolerance. {"testdata/video-001.png", "testdata/video-001.jpeg", 8 << 8}, {"testdata/video-001.png", "testdata/video-001.progressive.jpeg", 8 << 8}, + {"testdata/video-001.cmyk.png", "testdata/video-001.cmyk.jpeg", 8 << 8}, // Grayscale images. {"testdata/video-005.gray.png", "testdata/video-005.gray.jpeg", 8 << 8}, {"testdata/video-005.gray.png", "testdata/video-005.gray.png", 0}, diff --git a/src/image/jpeg/reader.go b/src/image/jpeg/reader.go index 6d8b1d1d03..72c3f064c0 100644 --- a/src/image/jpeg/reader.go +++ b/src/image/jpeg/reader.go @@ -10,6 +10,7 @@ package jpeg import ( "image" "image/color" + "image/draw" "io" ) @@ -41,10 +42,7 @@ const ( maxTh = 3 maxTq = 3 - // A grayscale JPEG image has only a Y component. - nGrayComponent = 1 - // A color JPEG image has Y, Cb and Cr components. - nColorComponent = 3 + maxComponents = 4 // We only support 4:4:4, 4:4:0, 4:2:2 and 4:2:0 downsampling, and therefore the // number of luma samples per chroma sample is at most 2 in the horizontal @@ -54,19 +52,30 @@ const ( ) const ( - soiMarker = 0xd8 // Start Of Image. - eoiMarker = 0xd9 // End Of Image. - sof0Marker = 0xc0 // Start Of Frame (Baseline). - sof2Marker = 0xc2 // Start Of Frame (Progressive). - dhtMarker = 0xc4 // Define Huffman Table. - dqtMarker = 0xdb // Define Quantization Table. - sosMarker = 0xda // Start Of Scan. - driMarker = 0xdd // Define Restart Interval. - rst0Marker = 0xd0 // ReSTart (0). - rst7Marker = 0xd7 // ReSTart (7). - app0Marker = 0xe0 // APPlication specific (0). - app15Marker = 0xef // APPlication specific (15). - comMarker = 0xfe // COMment. + soiMarker = 0xd8 // Start Of Image. + eoiMarker = 0xd9 // End Of Image. + sof0Marker = 0xc0 // Start Of Frame (Baseline). + sof2Marker = 0xc2 // Start Of Frame (Progressive). + dhtMarker = 0xc4 // Define Huffman Table. + dqtMarker = 0xdb // Define Quantization Table. + sosMarker = 0xda // Start Of Scan. + driMarker = 0xdd // Define Restart Interval. + rst0Marker = 0xd0 // ReSTart (0). + rst7Marker = 0xd7 // ReSTart (7). + comMarker = 0xfe // COMment. + // "APPlication specific" markers aren't part of the JPEG spec per se, + // but in practice, their use is described at + // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html + app0Marker = 0xe0 + app14Marker = 0xee + app15Marker = 0xef +) + +// See http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe +const ( + adobeTransformUnknown = 0 + adobeTransformYCbCr = 1 + adobeTransformYCbCrK = 2 ) // unzig maps from the zig-zag ordering to the natural ordering. For example, @@ -114,17 +123,24 @@ type decoder struct { nUnreadable int } width, height int - img1 *image.Gray - img3 *image.YCbCr - ri int // Restart Interval. - nComp int - progressive bool - eobRun uint16 // End-of-Band run, specified in section G.1.2.2. - comp [nColorComponent]component - progCoeffs [nColorComponent][]block // Saved state between progressive-mode scans. - huff [maxTc + 1][maxTh + 1]huffman - quant [maxTq + 1]block // Quantization tables, in zig-zag order. - tmp [blockSize + 1]byte + + img1 *image.Gray + img3 *image.YCbCr + blackPix []byte + blackStride int + + ri int // Restart Interval. + nComp int + progressive bool + adobeTransformValid bool + adobeTransform uint8 + eobRun uint16 // End-of-Band run, specified in section G.1.2.2. + + comp [maxComponents]component + progCoeffs [maxComponents][]block // Saved state between progressive-mode scans. + huff [maxTc + 1][maxTh + 1]huffman + quant [maxTq + 1]block // Quantization tables, in zig-zag order. + tmp [blockSize + 1]byte } // fill fills up the d.bytes.buf buffer from the underlying io.Reader. It @@ -285,10 +301,12 @@ func (d *decoder) ignore(n int) error { // Specified in section B.2.2. func (d *decoder) processSOF(n int) error { switch n { - case 6 + 3*nGrayComponent: - d.nComp = nGrayComponent - case 6 + 3*nColorComponent: - d.nComp = nColorComponent + case 6 + 3*1: // Grayscale image. + d.nComp = 1 + case 6 + 3*3: // YCbCr image. (TODO(nigeltao): or RGB image.) + d.nComp = 3 + case 6 + 3*4: // YCbCrK or CMYK image. + d.nComp = 4 default: return UnsupportedError("SOF has wrong length") } @@ -307,7 +325,7 @@ func (d *decoder) processSOF(n int) error { for i := 0; i < d.nComp; i++ { d.comp[i].c = d.tmp[6+3*i] d.comp[i].tq = d.tmp[8+3*i] - if d.nComp == nGrayComponent { + if d.nComp == 1 { // If a JPEG image has only one component, section A.2 says "this data // is non-interleaved by definition" and section A.2.2 says "[in this // case...] the order of data units within a scan shall be left-to-right @@ -326,16 +344,43 @@ func (d *decoder) processSOF(n int) error { hv := d.tmp[7+3*i] d.comp[i].h = int(hv >> 4) d.comp[i].v = int(hv & 0x0f) - // For color images, we only support 4:4:4, 4:4:0, 4:2:2 or 4:2:0 chroma - // downsampling ratios. This implies that the (h, v) values for the Y - // component are either (1, 1), (1, 2), (2, 1) or (2, 2), and the (h, v) - // values for the Cr and Cb components must be (1, 1). - if i == 0 { - if hv != 0x11 && hv != 0x21 && hv != 0x22 && hv != 0x12 { + switch d.nComp { + case 3: + // For YCbCr images, we only support 4:4:4, 4:4:0, 4:2:2 or 4:2:0 chroma + // downsampling ratios. This implies that the (h, v) values for the Y + // component are either (1, 1), (1, 2), (2, 1) or (2, 2), and the (h, v) + // values for the Cr and Cb components must be (1, 1). + if i == 0 { + if hv != 0x11 && hv != 0x21 && hv != 0x22 && hv != 0x12 { + return UnsupportedError("luma/chroma downsample ratio") + } + } else if hv != 0x11 { return UnsupportedError("luma/chroma downsample ratio") } - } else if hv != 0x11 { - return UnsupportedError("luma/chroma downsample ratio") + case 4: + // For 4-component images (either CMYK or YCbCrK), we only support two + // hv vectors: [0x11 0x11 0x11 0x11] and [0x22 0x11 0x11 0x22]. + // Theoretically, 4-component JPEG images could mix and match hv values + // but in practice, those two combinations are the only ones in use, + // and it simplifies the applyBlack code below if we can assume that: + // - for CMYK, the C and K channels have full samples, and if the M + // and Y channels subsample, they subsample both horizontally and + // vertically. + // - for YCbCrK, the Y and K channels have full samples. + switch i { + case 0: + if hv != 0x11 && hv != 0x22 { + return UnsupportedError("luma/chroma downsample ratio") + } + case 1, 2: + if hv != 0x11 { + return UnsupportedError("luma/chroma downsample ratio") + } + case 3: + if d.comp[0].h != d.comp[3].h || d.comp[0].v != d.comp[3].v { + return UnsupportedError("luma/chroma downsample ratio") + } + } } } return nil @@ -378,6 +423,26 @@ func (d *decoder) processDRI(n int) error { return nil } +func (d *decoder) processApp14Marker(n int) error { + if n < 12 { + return d.ignore(n) + } + if err := d.readFull(d.tmp[:12]); err != nil { + return err + } + n -= 12 + + if d.tmp[0] == 'A' && d.tmp[1] == 'd' && d.tmp[2] == 'o' && d.tmp[3] == 'b' && d.tmp[4] == 'e' { + d.adobeTransformValid = true + d.adobeTransform = d.tmp[11] + } + + if n > 0 { + return d.ignore(n) + } + return nil +} + // decode reads a JPEG image from r and returns it as an image.Image. func (d *decoder) decode(r io.Reader, configOnly bool) (image.Image, error) { d.r = r @@ -459,25 +524,29 @@ func (d *decoder) decode(r io.Reader, configOnly bool) (image.Image, error) { return nil, FormatError("short segment length") } - switch { - case marker == sof0Marker || marker == sof2Marker: // Start Of Frame. + switch marker { + case sof0Marker, sof2Marker: d.progressive = marker == sof2Marker err = d.processSOF(n) if configOnly { return nil, err } - case marker == dhtMarker: // Define Huffman Table. + case dhtMarker: err = d.processDHT(n) - case marker == dqtMarker: // Define Quantization Table. + case dqtMarker: err = d.processDQT(n) - case marker == sosMarker: // Start Of Scan. + case sosMarker: err = d.processSOS(n) - case marker == driMarker: // Define Restart Interval. + case driMarker: err = d.processDRI(n) - case app0Marker <= marker && marker <= app15Marker || marker == comMarker: // APPlication specific, or COMment. - err = d.ignore(n) + case app14Marker: + err = d.processApp14Marker(n) default: - err = UnsupportedError("unknown marker") + if app0Marker <= marker && marker <= app15Marker || marker == comMarker { + err = d.ignore(n) + } else { + err = UnsupportedError("unknown marker") + } } if err != nil { return nil, err @@ -487,11 +556,89 @@ func (d *decoder) decode(r io.Reader, configOnly bool) (image.Image, error) { return d.img1, nil } if d.img3 != nil { + if d.blackPix != nil { + return d.applyBlack() + } return d.img3, nil } return nil, FormatError("missing SOS marker") } +// applyBlack combines d.img3 and d.blackPix into a CMYK image. The formula +// used depends on whether the JPEG image is stored as CMYK or YCbCrK, +// indicated by the APP14 (Adobe) metadata. +// +// Adobe CMYK JPEG images are inverted, where 255 means no ink instead of full +// ink, so we apply "v = 255 - v" at various points. Note that a double +// inversion is a no-op, so inversions might be implicit in the code below. +func (d *decoder) applyBlack() (image.Image, error) { + if !d.adobeTransformValid { + return nil, UnsupportedError("unknown color model: 4-component JPEG doesn't have Adobe APP14 metadata") + } + + // If the 4-component JPEG image isn't explicitly marked as "Unknown (RGB + // or CMYK)" as per + // http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe + // we assume that it is YCbCrK. This matches libjpeg's jdapimin.c. + if d.adobeTransform != adobeTransformUnknown { + // Convert the YCbCr part of the YCbCrK to RGB, invert the RGB to get + // CMY, and patch in the original K. The RGB to CMY inversion cancels + // out the 'Adobe inversion' described in the applyBlack doc comment + // above, so in practice, only the fourth channel (black) is inverted. + bounds := d.img3.Bounds() + img := image.NewRGBA(bounds) + // TODO(nigeltao): do the draw.Draw YCbCr -> RGB conversion directly, + // instead of having the image/jpeg package depend on the image/draw + // package. + draw.Draw(img, bounds, d.img3, bounds.Min, draw.Src) + for iBase, y := 0, bounds.Min.Y; y < bounds.Max.Y; iBase, y = iBase+img.Stride, y+1 { + for i, x := iBase+3, bounds.Min.X; x < bounds.Max.X; i, x = i+4, x+1 { + img.Pix[i] = 255 - d.blackPix[(y-bounds.Min.Y)*d.blackStride+(x-bounds.Min.X)] + } + } + return &image.CMYK{ + Pix: img.Pix, + Stride: img.Stride, + Rect: img.Rect, + }, nil + } + + // The first three channels (cyan, magenta, yellow) of the CMYK + // were decoded into d.img3, but each channel was decoded into a separate + // []byte slice, and some channels may be subsampled. We interleave the + // separate channels into an image.CMYK's single []byte slice containing 4 + // contiguous bytes per pixel. + bounds := d.img3.Bounds() + img := image.NewCMYK(bounds) + + translations := [4]struct { + src []byte + stride int + }{ + {d.img3.Y, d.img3.YStride}, + {d.img3.Cb, d.img3.CStride}, + {d.img3.Cr, d.img3.CStride}, + {d.blackPix, d.blackStride}, + } + for t, translation := range translations { + subsample := d.comp[t].h != d.comp[0].h || d.comp[t].v != d.comp[0].v + for iBase, y := 0, bounds.Min.Y; y < bounds.Max.Y; iBase, y = iBase+img.Stride, y+1 { + sy := y - bounds.Min.Y + if subsample { + sy /= 2 + } + for i, x := iBase+t, bounds.Min.X; x < bounds.Max.X; i, x = i+4, x+1 { + sx := x - bounds.Min.X + if subsample { + sx /= 2 + } + img.Pix[i] = 255 - translation.src[sy*translation.stride+sx] + } + } + } + return img, nil +} + // Decode reads a JPEG image from r and returns it as an image.Image. func Decode(r io.Reader) (image.Image, error) { var d decoder @@ -506,15 +653,21 @@ func DecodeConfig(r io.Reader) (image.Config, error) { return image.Config{}, err } switch d.nComp { - case nGrayComponent: + case 1: return image.Config{ ColorModel: color.GrayModel, Width: d.width, Height: d.height, }, nil - case nColorComponent: + case 3: + return image.Config{ + ColorModel: color.YCbCrModel, // TODO(nigeltao): support RGB JPEGs. + Width: d.width, + Height: d.height, + }, nil + case 4: return image.Config{ - ColorModel: color.YCbCrModel, + ColorModel: color.CMYKModel, Width: d.width, Height: d.height, }, nil diff --git a/src/image/jpeg/scan.go b/src/image/jpeg/scan.go index 2bd1d9d531..4168936312 100644 --- a/src/image/jpeg/scan.go +++ b/src/image/jpeg/scan.go @@ -10,11 +10,12 @@ import ( // makeImg allocates and initializes the destination image. func (d *decoder) makeImg(h0, v0, mxx, myy int) { - if d.nComp == nGrayComponent { + if d.nComp == 1 { m := image.NewGray(image.Rect(0, 0, 8*mxx, 8*myy)) d.img1 = m.SubImage(image.Rect(0, 0, d.width, d.height)).(*image.Gray) return } + var subsampleRatio image.YCbCrSubsampleRatio switch { case h0 == 1 && v0 == 1: @@ -30,6 +31,12 @@ func (d *decoder) makeImg(h0, v0, mxx, myy int) { } m := image.NewYCbCr(image.Rect(0, 0, 8*h0*mxx, 8*v0*myy), subsampleRatio) d.img3 = m.SubImage(image.Rect(0, 0, d.width, d.height)).(*image.YCbCr) + + if d.nComp == 4 { + h3, v3 := d.comp[3].h, d.comp[3].v + d.blackPix = make([]byte, 8*h3*mxx*8*v3*myy) + d.blackStride = 8 * h3 * mxx + } } // Specified in section B.2.3. @@ -47,7 +54,7 @@ func (d *decoder) processSOS(n int) error { if n != 4+2*nComp { return FormatError("SOS length inconsistent with number of components") } - var scan [nColorComponent]struct { + var scan [maxComponents]struct { compIndex uint8 td uint8 // DC table selector. ta uint8 // AC table selector. @@ -128,7 +135,7 @@ func (d *decoder) processSOS(n int) error { var ( // b is the decoded coefficients, in natural (not zig-zag) order. b block - dc [nColorComponent]int32 + dc [maxComponents]int32 // bx and by are the location of the current (in terms of 8x8 blocks). // For example, with 4:2:0 chroma subsampling, the block whose top left // pixel co-ordinates are (16, 8) is the third block in the first row: @@ -276,7 +283,7 @@ func (d *decoder) processSOS(n int) error { } idct(&b) dst, stride := []byte(nil), 0 - if d.nComp == nGrayComponent { + if d.nComp == 1 { dst, stride = d.img1.Pix[8*(by*d.img1.Stride+bx):], d.img1.Stride } else { switch compIndex { @@ -286,6 +293,8 @@ func (d *decoder) processSOS(n int) error { dst, stride = d.img3.Cb[8*(by*d.img3.CStride+bx):], d.img3.CStride case 2: dst, stride = d.img3.Cr[8*(by*d.img3.CStride+bx):], d.img3.CStride + case 3: + dst, stride = d.blackPix[8*(by*d.blackStride+bx):], d.blackStride default: return UnsupportedError("too many components") } @@ -325,7 +334,7 @@ func (d *decoder) processSOS(n int) error { // Reset the Huffman decoder. d.bits = bits{} // Reset the DC components, as per section F.2.1.3.1. - dc = [nColorComponent]int32{} + dc = [maxComponents]int32{} // Reset the progressive decoder state, as per section G.1.2.2. d.eobRun = 0 } diff --git a/src/image/testdata/video-001.cmyk.jpeg b/src/image/testdata/video-001.cmyk.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..507df843b5ad298ae0b60b98749f566430424903 GIT binary patch literal 19477 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 literal 0 HcmV?d00001 diff --git a/src/image/testdata/video-001.cmyk.png b/src/image/testdata/video-001.cmyk.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7b2b88d8715dc8002962dc14cf216c9098f2f8 GIT binary patch literal 25439 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%0AUg;5j|p_8Q5dNoTkV@;N(HVhgQjc&Ue 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 aApc)ZcH~+)w@SeP0000