From eeacfd3811126370c2b992c40dc216f063a04b8c Mon Sep 17 00:00:00 2001 From: Nikita Galushko Date: Sun, 24 May 2020 18:25:31 +0300 Subject: [PATCH 1/2] [x/image/tiff:20742] wip --- tiff/consts.go | 1 + tiff/lzw/reader.go | 2 +- tiff/reader.go | 48 +++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/tiff/consts.go b/tiff/consts.go index 3c51a70b..d6403a0b 100644 --- a/tiff/consts.go +++ b/tiff/consts.go @@ -55,6 +55,7 @@ const ( tXResolution = 282 tYResolution = 283 tResolutionUnit = 296 + tPageNumber = 297 tPredictor = 317 tColorMap = 320 diff --git a/tiff/lzw/reader.go b/tiff/lzw/reader.go index 51ae39f8..1e98a19f 100644 --- a/tiff/lzw/reader.go +++ b/tiff/lzw/reader.go @@ -8,7 +8,7 @@ // // In particular, it implements LZW as used by the TIFF file format, including // an "off by one" algorithmic difference when compared to standard LZW. -package lzw // import "golang.org/x/image/tiff/lzw" +package lzw /* This file was branched from src/pkg/compress/lzw/reader.go in the diff --git a/tiff/reader.go b/tiff/reader.go index 0e3d3325..83cca6c8 100644 --- a/tiff/reader.go +++ b/tiff/reader.go @@ -5,7 +5,7 @@ // Package tiff implements a TIFF image decoder and encoder. // // The TIFF specification is at http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf -package tiff // import "golang.org/x/image/tiff" +package tiff import ( "compress/zlib" @@ -17,7 +17,7 @@ import ( "io/ioutil" "math" - "golang.org/x/image/tiff/lzw" + "github.com/jetuuuu/image/tiff/lzw" ) // A FormatError reports that the input is not a valid TIFF image. @@ -37,10 +37,22 @@ func (e UnsupportedError) Error() string { var errNoPixels = FormatError("not enough pixel data") +type Resolution struct { + X, Y int +} + +type Info struct { + image.Config + Resolution + PageCount int +} + type decoder struct { r io.ReaderAt byteOrder binary.ByteOrder config image.Config + res Resolution + pageCount int mode imageMode bpp uint features map[int][]uint @@ -62,6 +74,15 @@ func (d *decoder) firstVal(tag int) uint { return f[0] } +func (d *decoder) secondVal(tag int) uint { + f := d.features[tag] + if len(f) < 2 { + return 0 + } + + return f[1] +} + // ifdUint decodes the IFD entry in p, which must be of the Byte, Short // or Long type, and returns the decoded uint values. func (d *decoder) ifdUint(p []byte) (u []uint, err error) { @@ -104,6 +125,10 @@ func (d *decoder) ifdUint(p []byte) (u []uint, err error) { for i := uint32(0); i < count; i++ { u[i] = uint(d.byteOrder.Uint32(raw[4*i : 4*(i+1)])) } + case dtRational: + for i := uint32(0); i < count; i++ { + u[i] = uint(d.byteOrder.Uint32(raw[4*i : 4*(i+1)])) + } default: return nil, UnsupportedError("data type") } @@ -129,7 +154,10 @@ func (d *decoder) parseIFD(p []byte) (int, error) { tTileOffsets, tTileByteCounts, tImageLength, - tImageWidth: + tImageWidth, + tXResolution, + tYResolution, + tPageNumber: val, err := d.ifdUint(p) if err != nil { return 0, err @@ -437,6 +465,11 @@ func newDecoder(r io.Reader) (*decoder, error) { d.config.Width = int(d.firstVal(tImageWidth)) d.config.Height = int(d.firstVal(tImageLength)) + d.res.X = int(d.firstVal(tXResolution)) + d.res.Y = int(d.firstVal(tYResolution)) + + d.pageCount = int(d.secondVal(tPageNumber)) + if _, ok := d.features[tBitsPerSample]; !ok { return nil, FormatError("BitsPerSample tag missing") } @@ -536,6 +569,15 @@ func DecodeConfig(r io.Reader) (image.Config, error) { return d.config, nil } +func DecodeInfo(r io.Reader) (Info, error) { + d, err := newDecoder(r) + if err != nil { + return Info{}, err + } + + return Info{d.config, d.res, d.pageCount}, nil +} + // Decode reads a TIFF image from r and returns it as an image.Image. // The type of Image returned depends on the contents of the TIFF. func Decode(r io.Reader) (img image.Image, err error) { From 55c8a332952d3a844422b89c5e8fcb89989e2dcb Mon Sep 17 00:00:00 2001 From: Nikita Galushko Date: Mon, 25 May 2020 08:53:13 +0300 Subject: [PATCH 2/2] x/image/tiff: improve reading tags This improvement reading xResolution, yResolution and page count tags. Fixies 20742 --- testdata/gopherhat.tiff | Bin 0 -> 127368 bytes tiff/lzw/reader.go | 2 +- tiff/reader.go | 75 +++++++++++++++++++++++++++------------- tiff/reader_test.go | 30 ++++++++++++++++ 4 files changed, 82 insertions(+), 25 deletions(-) create mode 100644 testdata/gopherhat.tiff diff --git a/testdata/gopherhat.tiff b/testdata/gopherhat.tiff new file mode 100644 index 0000000000000000000000000000000000000000..fd578a602e825161f1ec08e513da5b8dd09769f5 GIT binary patch literal 127368 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%0DcMbd|VWg}%AzBp=5h$a^$8X_SA1;=|tp627 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°pE8{skr}15tdjbwiUZyqK9$$B3t3F36$K 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 literal 0 HcmV?d00001 diff --git a/tiff/lzw/reader.go b/tiff/lzw/reader.go index dbcaafa1..78204ba9 100644 --- a/tiff/lzw/reader.go +++ b/tiff/lzw/reader.go @@ -8,7 +8,7 @@ // // In particular, it implements LZW as used by the TIFF file format, including // an "off by one" algorithmic difference when compared to standard LZW. -package lzw +package lzw // import "golang.org/x/image/tiff/lzw" /* This file was branched from src/pkg/compress/lzw/reader.go in the diff --git a/tiff/reader.go b/tiff/reader.go index 629b92d2..48155fd7 100644 --- a/tiff/reader.go +++ b/tiff/reader.go @@ -5,7 +5,7 @@ // Package tiff implements a TIFF image decoder and encoder. // // The TIFF specification is at http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf -package tiff +package tiff // import "golang.org/x/image/tiff" import ( "compress/zlib" @@ -21,6 +21,32 @@ import ( "golang.org/x/image/tiff/lzw" ) +// MeasurementResolutionUnit is the units of measure for resolution +type MeasurementResolutionUnit int + +const ( + // None is no absolute unit of measurement. + None MeasurementResolutionUnit = 1 + // Inch unit of measurement. + Inch MeasurementResolutionUnit = 2 + // Centimeter unit of measurement. + Centimeter MeasurementResolutionUnit = 3 +) + +// An Info is container for image.Config, a TIFF iamge resolution and the number of the page a TIFF image. +type Info struct { + image.Config + // XResolution is the number of pixels per ResolutionUnit in the image.Config.Width direction. + XResolution int + // YResolution is the number of pixels per ResolutionUnit in the image.Config.Width direction. + YResolution int + // UnitResolution is the unit of measurement for XResolution and YResolution. + UnitResolution MeasurementResolutionUnit + //PageCount is the number of the page from which a TIFF image was scanned. + // If PageCount is 0, the total number of pages in the document is not available. + PageCount int +} + // A FormatError reports that the input is not a valid TIFF image. type FormatError string @@ -38,21 +64,14 @@ func (e UnsupportedError) Error() string { var errNoPixels = FormatError("not enough pixel data") -type Resolution struct { - X, Y int -} - -type Info struct { - image.Config - Resolution - PageCount int -} - type decoder struct { - r io.ReaderAt - byteOrder binary.ByteOrder - config image.Config - res Resolution + r io.ReaderAt + byteOrder binary.ByteOrder + config image.Config + resolution struct { + x, y int + unit MeasurementResolutionUnit + } pageCount int mode imageMode bpp uint @@ -122,11 +141,7 @@ func (d *decoder) ifdUint(p []byte) (u []uint, err error) { for i := uint32(0); i < count; i++ { u[i] = uint(d.byteOrder.Uint16(raw[2*i : 2*(i+1)])) } - case dtLong: - for i := uint32(0); i < count; i++ { - u[i] = uint(d.byteOrder.Uint32(raw[4*i : 4*(i+1)])) - } - case dtRational: + case dtLong, dtRational: for i := uint32(0); i < count; i++ { u[i] = uint(d.byteOrder.Uint32(raw[4*i : 4*(i+1)])) } @@ -158,6 +173,7 @@ func (d *decoder) parseIFD(p []byte) (int, error) { tImageWidth, tXResolution, tYResolution, + tResolutionUnit, tPageNumber, tFillOrder, tT4Options, @@ -475,8 +491,17 @@ func newDecoder(r io.Reader) (*decoder, error) { d.config.Width = int(d.firstVal(tImageWidth)) d.config.Height = int(d.firstVal(tImageLength)) - d.res.X = int(d.firstVal(tXResolution)) - d.res.Y = int(d.firstVal(tYResolution)) + d.resolution.x = int(d.firstVal(tXResolution)) + d.resolution.y = int(d.firstVal(tYResolution)) + + switch int(d.firstVal(tResolutionUnit)) { + case 2: + d.resolution.unit = Inch + case 3: + d.resolution.unit = Centimeter + default: + d.resolution.unit = None + } d.pageCount = int(d.secondVal(tPageNumber)) @@ -580,13 +605,15 @@ func DecodeConfig(r io.Reader) (image.Config, error) { return d.config, nil } -func DecodeInfo(r io.Reader) (Info, error) { +// DecodeTIFFInfo returns the page count and resolution of a TIFF image without +// decoding the entire image +func DecodeTIFFInfo(r io.Reader) (Info, error) { d, err := newDecoder(r) if err != nil { return Info{}, err } - return Info{d.config, d.res, d.pageCount}, nil + return Info{d.config, d.resolution.x, d.resolution.y, d.resolution.unit, d.pageCount}, nil } func ccittFillOrder(tiffFillOrder uint) ccitt.Order { diff --git a/tiff/reader_test.go b/tiff/reader_test.go index f91fd94f..43466b4b 100644 --- a/tiff/reader_test.go +++ b/tiff/reader_test.go @@ -411,6 +411,36 @@ func TestLargeIFDEntry(t *testing.T) { } } +// TestGetResolution tests decoding an image that has XResolution, YResolution and PageNumber tags. +// Issue 20742 +func TestGetResolution(t *testing.T) { + r, err := ioutil.ReadFile(testdataDir + "gopherhat.tiff") + if err != nil { + t.Fatal(err) + } + + info, err := DecodeTIFFInfo(bytes.NewReader(r)) + if err != nil { + t.Fatal(err) + } + + if info.XResolution != 204 { + t.Fatalf("X resolution must be 204 but %d", info.XResolution) + } + + if info.YResolution != 192 { + t.Fatalf("Y resolution must be 192 but %d", info.YResolution) + } + + if info.PageCount != 1 { + t.Fatalf("PageCount must be 1 but %d", info.PageCount) + } + + if info.UnitResolution != Inch { + t.Fatalf("UnitResolution must be Inch but %d", info.UnitResolution) + } +} + // benchmarkDecode benchmarks the decoding of an image. func benchmarkDecode(b *testing.B, filename string) { b.Helper()