1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package imagemeta
- import (
- "bytes"
- "encoding/binary"
- "io"
- "github.com/imgproxy/imgproxy/v3/imagetype"
- )
- var pngMagick = []byte("\x89PNG\r\n\x1a\n")
- type PngFormatError string
- func (e PngFormatError) Error() string { return "invalid PNG format: " + string(e) }
- func DecodePngMeta(r io.Reader) (Meta, error) {
- var tmp [16]byte
- if _, err := io.ReadFull(r, tmp[:8]); err != nil {
- return nil, err
- }
- if !bytes.Equal(pngMagick, tmp[:8]) {
- return nil, PngFormatError("not a PNG image")
- }
- if _, err := io.ReadFull(r, tmp[:]); err != nil {
- return nil, err
- }
- return &meta{
- format: imagetype.PNG,
- width: int(binary.BigEndian.Uint32(tmp[8:12])),
- height: int(binary.BigEndian.Uint32(tmp[12:16])),
- }, nil
- }
- func init() {
- RegisterFormat(string(pngMagick), DecodePngMeta)
- }
|