mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 09:12:24 -06:00 
			
		
		
		
	* 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>
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package exif
 | 
						|
 | 
						|
import (
 | 
						|
	"io"
 | 
						|
 | 
						|
	"github.com/dsoprea/go-logging"
 | 
						|
	"github.com/dsoprea/go-utility/v2/filesystem"
 | 
						|
)
 | 
						|
 | 
						|
type ExifBlobSeeker interface {
 | 
						|
	GetReadSeeker(initialOffset int64) (rs io.ReadSeeker, err error)
 | 
						|
}
 | 
						|
 | 
						|
// ExifReadSeeker knows how to retrieve data from the EXIF blob relative to the
 | 
						|
// beginning of the blob (so, absolute position (0) is the first byte of the
 | 
						|
// EXIF data).
 | 
						|
type ExifReadSeeker struct {
 | 
						|
	rs io.ReadSeeker
 | 
						|
}
 | 
						|
 | 
						|
func NewExifReadSeeker(rs io.ReadSeeker) *ExifReadSeeker {
 | 
						|
	return &ExifReadSeeker{
 | 
						|
		rs: rs,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func NewExifReadSeekerWithBytes(exifData []byte) *ExifReadSeeker {
 | 
						|
	sb := rifs.NewSeekableBufferWithBytes(exifData)
 | 
						|
	edbs := NewExifReadSeeker(sb)
 | 
						|
 | 
						|
	return edbs
 | 
						|
}
 | 
						|
 | 
						|
// Fork creates a new ReadSeeker instead that wraps a BouncebackReader to
 | 
						|
// maintain its own position in the stream.
 | 
						|
func (edbs *ExifReadSeeker) GetReadSeeker(initialOffset int64) (rs io.ReadSeeker, err error) {
 | 
						|
	defer func() {
 | 
						|
		if state := recover(); state != nil {
 | 
						|
			err = log.Wrap(state.(error))
 | 
						|
		}
 | 
						|
	}()
 | 
						|
 | 
						|
	br, err := rifs.NewBouncebackReader(edbs.rs)
 | 
						|
	log.PanicIf(err)
 | 
						|
 | 
						|
	_, err = br.Seek(initialOffset, io.SeekStart)
 | 
						|
	log.PanicIf(err)
 | 
						|
 | 
						|
	return br, nil
 | 
						|
}
 |