mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 23:12:26 -06:00 
			
		
		
		
	[chore] add back exif-terminator and use only for jpeg,png,webp (#3161)
* add back exif-terminator and use only for jpeg,png,webp * fix arguments passed to terminateExif() * pull in latest exif-terminator * fix test * update processed img --------- Co-authored-by: tobi <tobi.smethurst@protonmail.com>
This commit is contained in:
		
					parent
					
						
							
								7b5917d6ae
							
						
					
				
			
			
				commit
				
					
						94e87610c4
					
				
			
		
					 191 changed files with 38772 additions and 58 deletions
				
			
		
							
								
								
									
										85
									
								
								vendor/github.com/superseriousbusiness/go-png-image-structure/v2/media_parser.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								vendor/github.com/superseriousbusiness/go-png-image-structure/v2/media_parser.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,85 @@
 | 
			
		|||
package pngstructure
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"image"
 | 
			
		||||
	"io"
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	"image/png"
 | 
			
		||||
 | 
			
		||||
	riimage "github.com/dsoprea/go-utility/v2/image"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// PngMediaParser knows how to parse a PNG stream.
 | 
			
		||||
type PngMediaParser struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewPngMediaParser returns a new `PngMediaParser`.
 | 
			
		||||
func NewPngMediaParser() riimage.MediaParser {
 | 
			
		||||
	return new(PngMediaParser)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Parse parses a PNG stream given a `io.ReadSeeker`.
 | 
			
		||||
func (pmp *PngMediaParser) Parse(
 | 
			
		||||
	rs io.ReadSeeker,
 | 
			
		||||
	size int,
 | 
			
		||||
) (riimage.MediaContext, error) {
 | 
			
		||||
	ps := NewPngSplitter()
 | 
			
		||||
	if err := ps.readHeader(rs); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	s := bufio.NewScanner(rs)
 | 
			
		||||
 | 
			
		||||
	// Since each segment can be any
 | 
			
		||||
	// size, our buffer must be allowed
 | 
			
		||||
	// to grow as large as the file.
 | 
			
		||||
	buffer := []byte{}
 | 
			
		||||
	s.Buffer(buffer, size)
 | 
			
		||||
	s.Split(ps.Split)
 | 
			
		||||
 | 
			
		||||
	for s.Scan() {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := s.Err(); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ps.Chunks()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseFile parses a PNG stream given a file-path.
 | 
			
		||||
func (pmp *PngMediaParser) ParseFile(filepath string) (riimage.MediaContext, error) {
 | 
			
		||||
	f, err := os.Open(filepath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer f.Close()
 | 
			
		||||
 | 
			
		||||
	stat, err := f.Stat()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	size := stat.Size()
 | 
			
		||||
	return pmp.Parse(f, int(size))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParseBytes parses a PNG stream given a byte-slice.
 | 
			
		||||
func (pmp *PngMediaParser) ParseBytes(data []byte) (riimage.MediaContext, error) {
 | 
			
		||||
	br := bytes.NewReader(data)
 | 
			
		||||
	return pmp.Parse(br, len(data))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LooksLikeFormat returns a boolean indicating
 | 
			
		||||
// whether the stream looks like a PNG image.
 | 
			
		||||
func (pmp *PngMediaParser) LooksLikeFormat(data []byte) bool {
 | 
			
		||||
	return bytes.Equal(data[:len(PngSignature)], PngSignature[:])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetImage returns an image.Image-compatible struct.
 | 
			
		||||
func (pmp *PngMediaParser) GetImage(r io.Reader) (img image.Image, err error) {
 | 
			
		||||
	return png.Decode(r)
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue