From 05d36c3af5874d0716fdcb76dfc391b97b9955d7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 31 Mar 2026 15:57:13 +0000 Subject: [PATCH 1/2] Initial plan From 86e22c9a127d2614fdaf65aca1ad75d133320edd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 31 Mar 2026 16:13:23 +0000 Subject: [PATCH 2/2] Add WebP/BMP RGBA parsing and APNG format support Agent-Logs-Url: https://github.com/echosoar/imgpro/sessions/f6157263-e53e-4b06-8672-a9aa14b34f47 Co-authored-by: echosoar <14832743+echosoar@users.noreply.github.com> --- go.mod | 4 +- go.sum | 2 + processor/apng.go | 108 ++++++++++++++++++++++++++++++++++++++++++++ processor/rgba.go | 24 +++++++++- processor/type.go | 25 +++++++++- processor/wh.go | 2 +- test/imgs/cool.apng | Bin 0 -> 291 bytes test/imgs/go_24.bmp | Bin 0 -> 4207974 bytes test/rgba_test.go | 60 ++++++++++++++++++++++++ test/type_test.go | 7 +++ test/wh_test.go | 9 ++++ 11 files changed, 237 insertions(+), 4 deletions(-) create mode 100644 go.sum create mode 100644 processor/apng.go create mode 100644 test/imgs/cool.apng create mode 100644 test/imgs/go_24.bmp diff --git a/go.mod b/go.mod index f93a343..a4930bd 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module github.com/echosoar/imgpro -go 1.15 +go 1.25.0 + +require golang.org/x/image v0.23.0 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..8ec2c9e --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68= +golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY= diff --git a/processor/apng.go b/processor/apng.go new file mode 100644 index 0000000..6f357f0 --- /dev/null +++ b/processor/apng.go @@ -0,0 +1,108 @@ +package processor + +import ( + "encoding/binary" + "hash/crc32" +) + +// apngFrame holds the parsed metadata and compressed image data for a single APNG frame. +type apngFrame struct { + width int + height int + xOffset int + yOffset int + // idatData is the raw compressed pixel data (equivalent to PNG IDAT content). + idatData []byte +} + +// parseAPNGFrames parses an APNG file and returns each animation frame together +// with the raw IHDR chunk bytes and any ancillary chunks (PLTE, tRNS, etc.) +// required to reconstruct valid per-frame PNG images. +func parseAPNGFrames(fileBytes []byte) (frames []apngFrame, ihdrChunk []byte, ancillaryChunks []byte) { + offset := 8 // skip PNG signature + var current *apngFrame + firstFctlSeen := false + + for offset+12 <= len(fileBytes) { + chunkLen := int(binary.BigEndian.Uint32(fileBytes[offset : offset+4])) + if offset+12+chunkLen > len(fileBytes) { + break + } + chunkType := string(fileBytes[offset+4 : offset+8]) + chunkData := fileBytes[offset+8 : offset+8+chunkLen] + rawChunk := fileBytes[offset : offset+12+chunkLen] + + switch chunkType { + case "IHDR": + ihdrChunk = rawChunk + case "PLTE", "tRNS", "gAMA", "cHRM", "sRGB", "iCCP", "bKGD", "sBIT": + ancillaryChunks = append(ancillaryChunks, rawChunk...) + case "fcTL": + if current != nil { + frames = append(frames, *current) + } + // fcTL layout: seq(4) + width(4) + height(4) + x_offset(4) + y_offset(4) + ... + f := apngFrame{ + width: int(binary.BigEndian.Uint32(chunkData[4:8])), + height: int(binary.BigEndian.Uint32(chunkData[8:12])), + xOffset: int(binary.BigEndian.Uint32(chunkData[12:16])), + yOffset: int(binary.BigEndian.Uint32(chunkData[16:20])), + } + current = &f + firstFctlSeen = true + case "IDAT": + // When the first fcTL precedes the first IDAT, those IDAT chunks + // belong to the first animation frame. + if firstFctlSeen && current != nil { + current.idatData = append(current.idatData, chunkData...) + } + case "fdAT": + // fdAT layout: seq(4) + compressed_image_data + if current != nil && len(chunkData) > 4 { + current.idatData = append(current.idatData, chunkData[4:]...) + } + case "IEND": + if current != nil { + frames = append(frames, *current) + current = nil + } + } + + offset += 12 + chunkLen + } + return +} + +// buildAPNGFramePNG reconstructs a minimal, self-contained PNG file for the +// given frame so that it can be decoded with image.Decode. +func buildAPNGFramePNG(frame apngFrame, ihdrChunk []byte, ancillaryChunks []byte) []byte { + pngSig := []byte{0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A} + + // Build a new IHDR using the frame's own width/height but the original + // bit-depth, colour-type, compression, filter and interlace values. + originalIHDRData := ihdrChunk[8 : len(ihdrChunk)-4] // strip length, type and CRC + newIHDRData := make([]byte, 13) + binary.BigEndian.PutUint32(newIHDRData[0:4], uint32(frame.width)) + binary.BigEndian.PutUint32(newIHDRData[4:8], uint32(frame.height)) + copy(newIHDRData[8:13], originalIHDRData[8:13]) + + var buf []byte + buf = append(buf, pngSig...) + buf = append(buf, buildPNGChunk("IHDR", newIHDRData)...) + buf = append(buf, ancillaryChunks...) + buf = append(buf, buildPNGChunk("IDAT", frame.idatData)...) + buf = append(buf, buildPNGChunk("IEND", nil)...) + return buf +} + +// buildPNGChunk creates a complete PNG chunk (length + type + data + CRC). +func buildPNGChunk(chunkType string, data []byte) []byte { + buf := make([]byte, 4+4+len(data)+4) + binary.BigEndian.PutUint32(buf[0:4], uint32(len(data))) + copy(buf[4:8], chunkType) + copy(buf[8:], data) + c := crc32.NewIEEE() + c.Write(buf[4 : 8+len(data)]) + binary.BigEndian.PutUint32(buf[8+len(data):], c.Sum32()) + return buf +} diff --git a/processor/rgba.go b/processor/rgba.go index 3919512..d90ad51 100644 --- a/processor/rgba.go +++ b/processor/rgba.go @@ -7,6 +7,8 @@ import ( "image/gif" img "github.com/echosoar/imgpro/core" + _ "golang.org/x/image/bmp" + _ "golang.org/x/image/webp" ) // RGBAProcessor bin size processor @@ -52,7 +54,7 @@ func rgbaRunner(core *img.Core) map[string]img.Value { frame := 0 frameRGBAs := []img.Value{} - if imgType == "png" || imgType == "jpg" { + if imgType == "png" || imgType == "jpg" || imgType == "webp" || imgType == "bmp" { frame = 1 frameRGBAs = make([]img.Value, 1) originalImage, _, err := image.Decode(bytes.NewReader(core.FileBinary)) @@ -86,6 +88,26 @@ func rgbaRunner(core *img.Core) map[string]img.Value { Rgba: rgbaFrame, } } + } else if imgType == "apng" { + apngFrames, ihdrChunk, ancillaryChunks := parseAPNGFrames(core.FileBinary) + frame = len(apngFrames) + frameRGBAs = make([]img.Value, frame) + for frameIndex, apngF := range apngFrames { + framePNG := buildAPNGFramePNG(apngF, ihdrChunk, ancillaryChunks) + frameImg, _, err := image.Decode(bytes.NewReader(framePNG)) + if err != nil { + continue + } + rgbaFrame := make([]img.RGBA, height*width) + bounds := image.Rect(apngF.xOffset, apngF.yOffset, apngF.xOffset+apngF.width, apngF.yOffset+apngF.height) + rgba := image.NewRGBA(bounds) + draw.Draw(rgba, bounds, frameImg, frameImg.Bounds().Min, draw.Src) + readImageRGBA(width, height, &bounds, &rgbaFrame, rgba) + frameRGBAs[frameIndex] = img.Value{ + Type: img.ValueTypeRGBA, + Rgba: rgbaFrame, + } + } } return map[string]img.Value{ diff --git a/processor/type.go b/processor/type.go index 6e0d401..ef36bdb 100644 --- a/processor/type.go +++ b/processor/type.go @@ -2,6 +2,7 @@ package processor import ( "bytes" + "encoding/binary" img "github.com/echosoar/imgpro/core" ) @@ -24,7 +25,11 @@ func typeRunner(core *img.Core) map[string]img.Value { } else if bytes.HasPrefix(fileBytes, []byte("GIF87a")) || bytes.HasPrefix(fileBytes, []byte("GIF89a")) { imgType = "gif" } else if bytes.HasPrefix(fileBytes, []byte("\x89PNG\x0D\x0A\x1A\x0A")) { - imgType = "png" + if isPNGAnimated(fileBytes) { + imgType = "apng" + } else { + imgType = "png" + } } else if bytes.HasPrefix(fileBytes, []byte("\xFF\xD8\xFF")) { imgType = "jpg" } else if len(fileBytes) >= 14 { @@ -50,3 +55,21 @@ func typeRunner(core *img.Core) map[string]img.Value { }, } } + +// isPNGAnimated returns true if the PNG data contains an acTL chunk, identifying it as APNG. +func isPNGAnimated(fileBytes []byte) bool { + offset := 8 // skip PNG signature + for offset+12 <= len(fileBytes) { + chunkLen := int(binary.BigEndian.Uint32(fileBytes[offset : offset+4])) + chunkType := string(fileBytes[offset+4 : offset+8]) + if chunkType == "acTL" { + return true + } + // Stop searching after the first IDAT or IEND chunk + if chunkType == "IDAT" || chunkType == "IEND" { + return false + } + offset += 12 + chunkLen + } + return false +} diff --git a/processor/wh.go b/processor/wh.go index 13c038e..3551ea2 100644 --- a/processor/wh.go +++ b/processor/wh.go @@ -29,7 +29,7 @@ func whRunner(core *img.Core) map[string]img.Value { height := 0 fileBytes := core.FileBinary - if imgType == "png" || imgType == "jpg" || imgType == "gif" { + if imgType == "png" || imgType == "apng" || imgType == "jpg" || imgType == "gif" { image, _, err := image.DecodeConfig(bytes.NewReader(core.FileBinary)) if err != nil { panic(err) diff --git a/test/imgs/cool.apng b/test/imgs/cool.apng new file mode 100644 index 0000000000000000000000000000000000000000..90d7b9940719e4dcc81b7c81555b3a826846cc73 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^EFjFm1SHiab7}%9j>O~;A0W*P#0=-&?m7UZq|zW_ zAR({@5CaSt85kKDqSfDkIHH~|jv*Cul760VVDRB_DFjLV|8J7Z$Tk1i#0H=Om@y#R zuo$y#qy0;ujC5LxV+fFD1{#(4<2(bq4-e0g0*GP8d5m0p+TREw83r>5L_+|?P1U}W sfm|7=VXPp-5`d;L`|x-$n6nFjoMx2I$aU$0vJ^<0r>mdKI;Vst0B!s?kpKVy literal 0 HcmV?d00001 diff --git a/test/imgs/go_24.bmp b/test/imgs/go_24.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e52075ce54fbbd79b9afe3dfb7dd9ac62125e62f GIT binary patch literal 4207974 zcmeGF2b^A2ojCrJNkR)v=>h_}h^R|%!AggP1w;^0DN09BQQ<4L6?72`D64?N(rn1O z3Q6ecA-yMrg!D>6NbhZC_#b!vzvII*nVDziY4^GJ%`5KS=RWtId(Qiw^Lg?)x#g69 zzxKFKZS#-+jt~F);6MJi?Kazdr}H-3blPU0f2`i-$ngE{-M0C^|NY;J@PFR+9{~ac z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UsBwXX 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 z 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 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs W0RjXF5FkK+009C72oUI&0{;&QZDEW6 literal 0 HcmV?d00001 diff --git a/test/rgba_test.go b/test/rgba_test.go index d7e2355..a7cde83 100644 --- a/test/rgba_test.go +++ b/test/rgba_test.go @@ -44,3 +44,63 @@ func TestRGBAGif(t *testing.T) { t.Fatal("rgba gif frames error", result["frame"].Int) } } + +func TestRGBABmp(t *testing.T) { + result := Run("./imgs/go_24.bmp", []string{"rgba"}) + if len(result["rgba"].Frames[0].Rgba) != 1402640 { + t.Fatal("rgba bmp error") + } + if result["rgba"].Frames[0].Rgba[600000].R != 106 { + t.Fatal("rgba bmp r error") + } + if result["rgba"].Frames[0].Rgba[600000].G != 215 { + t.Fatal("rgba bmp g error") + } + if result["rgba"].Frames[0].Rgba[600000].B != 229 { + t.Fatal("rgba bmp b error") + } +} + +func TestRGBAWebp(t *testing.T) { + result := Run("./imgs/go_32.webp", []string{"rgba"}) + if len(result["rgba"].Frames[0].Rgba) != 1402640 { + t.Fatal("rgba webp error") + } + if result["rgba"].Frames[0].Rgba[600000].R != 107 { + t.Fatal("rgba webp r error") + } + if result["rgba"].Frames[0].Rgba[600000].G != 201 { + t.Fatal("rgba webp g error") + } + if result["rgba"].Frames[0].Rgba[600000].B != 213 { + t.Fatal("rgba webp b error") + } +} + +func TestRGBAApng(t *testing.T) { + result := Run("./imgs/cool.apng", []string{"rgba", "frame"}) + if result["frame"].Int != 3 { + t.Fatal("rgba apng frames error", result["frame"].Int) + } + if len(result["rgba"].Frames[0].Rgba) != 16 { + t.Fatal("rgba apng frame size error") + } + // Frame 0 is solid red + if result["rgba"].Frames[0].Rgba[0].R != 255 { + t.Fatal("rgba apng frame0 r error") + } + if result["rgba"].Frames[0].Rgba[0].G != 0 { + t.Fatal("rgba apng frame0 g error") + } + if result["rgba"].Frames[0].Rgba[0].B != 0 { + t.Fatal("rgba apng frame0 b error") + } + // Frame 1 is solid green + if result["rgba"].Frames[1].Rgba[0].G != 255 { + t.Fatal("rgba apng frame1 g error") + } + // Frame 2 is solid blue + if result["rgba"].Frames[2].Rgba[0].B != 255 { + t.Fatal("rgba apng frame2 b error") + } +} diff --git a/test/type_test.go b/test/type_test.go index 83fe2af..dc74782 100644 --- a/test/type_test.go +++ b/test/type_test.go @@ -46,3 +46,10 @@ func TestTypeWebp88(t *testing.T) { t.Fatal("type error") } } + +func TestTypeApng(t *testing.T) { + result := Run("./imgs/cool.apng", []string{"type"}) + if result["type"].String != "apng" { + t.Fatal("type error", result["type"].String) + } +} diff --git a/test/wh_test.go b/test/wh_test.go index 8d3bcd9..e571ce6 100644 --- a/test/wh_test.go +++ b/test/wh_test.go @@ -55,6 +55,15 @@ func TestWHWebp32(t *testing.T) { t.Fatal("webp height error") } } +func TestWHApng(t *testing.T) { + result := Run("./imgs/cool.apng", []string{"width", "height"}) + if result["width"].Int != 4 { + t.Fatal("apng width error") + } + if result["height"].Int != 4 { + t.Fatal("apng height error") + } +} func TestWHWebp88(t *testing.T) { result := Run("./imgs/cool_88.webp", []string{"width", "height"}) if result["width"].Int != 300 {