diff options
| author | 2025-03-02 15:44:02 +0100 | |
|---|---|---|
| committer | 2025-03-02 15:44:02 +0100 | |
| commit | d8bb1c391b06050d0cbde554d7ba2366384f2c7d (patch) | |
| tree | 55c47be446ebbc1213c1ab4de0482430f18cdd14 /vendor/codeberg.org/superseriousbusiness/go-png-image-structure/v2/chunk_decoder.go | |
| parent | [chore] github.com/superseriousbusiness/httpsig -> codeberg.org/superseriousb... (diff) | |
| download | gotosocial-d8bb1c391b06050d0cbde554d7ba2366384f2c7d.tar.xz | |
[chore] Update exif terminator version with codeberg libraries (#3855)
Diffstat (limited to 'vendor/codeberg.org/superseriousbusiness/go-png-image-structure/v2/chunk_decoder.go')
| -rw-r--r-- | vendor/codeberg.org/superseriousbusiness/go-png-image-structure/v2/chunk_decoder.go | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/vendor/codeberg.org/superseriousbusiness/go-png-image-structure/v2/chunk_decoder.go b/vendor/codeberg.org/superseriousbusiness/go-png-image-structure/v2/chunk_decoder.go new file mode 100644 index 000000000..518bc91ad --- /dev/null +++ b/vendor/codeberg.org/superseriousbusiness/go-png-image-structure/v2/chunk_decoder.go @@ -0,0 +1,81 @@ +package pngstructure + +import ( + "bytes" + "fmt" + + "encoding/binary" +) + +type ChunkDecoder struct { +} + +func NewChunkDecoder() *ChunkDecoder { + return new(ChunkDecoder) +} + +func (cd *ChunkDecoder) Decode(c *Chunk) (decoded interface{}, err error) { + switch c.Type { + case "IHDR": + return cd.decodeIHDR(c) + } + + // We don't decode this type. + return nil, nil +} + +type ChunkIHDR struct { + Width uint32 + Height uint32 + BitDepth uint8 + ColorType uint8 + CompressionMethod uint8 + FilterMethod uint8 + InterlaceMethod uint8 +} + +func (ihdr *ChunkIHDR) String() string { + return fmt.Sprintf("IHDR<WIDTH=(%d) HEIGHT=(%d) DEPTH=(%d) COLOR-TYPE=(%d) COMP-METHOD=(%d) FILTER-METHOD=(%d) INTRLC-METHOD=(%d)>", + ihdr.Width, ihdr.Height, ihdr.BitDepth, ihdr.ColorType, ihdr.CompressionMethod, ihdr.FilterMethod, ihdr.InterlaceMethod, + ) +} + +func (cd *ChunkDecoder) decodeIHDR(c *Chunk) (*ChunkIHDR, error) { + var ( + b = bytes.NewBuffer(c.Data) + ihdr = new(ChunkIHDR) + readf = func(data interface{}) error { + return binary.Read(b, binary.BigEndian, data) + } + ) + + if err := readf(&ihdr.Width); err != nil { + return nil, err + } + + if err := readf(&ihdr.Height); err != nil { + return nil, err + } + + if err := readf(&ihdr.BitDepth); err != nil { + return nil, err + } + + if err := readf(&ihdr.ColorType); err != nil { + return nil, err + } + + if err := readf(&ihdr.CompressionMethod); err != nil { + return nil, err + } + + if err := readf(&ihdr.FilterMethod); err != nil { + return nil, err + } + + if err := readf(&ihdr.InterlaceMethod); err != nil { + return nil, err + } + + return ihdr, nil +} |
