first commit

This commit is contained in:
Aurélie Delhaie
2023-06-21 22:57:47 +02:00
commit 10867d2d85
6 changed files with 316 additions and 0 deletions

55
exif/exif.go Normal file
View File

@@ -0,0 +1,55 @@
package exif
import "io"
type (
writerSkipper struct {
io.Writer
bytesToSkip int
}
)
func NewWriterExif(w io.Writer, exif []byte) (io.Writer, error) {
writer := &writerSkipper{
Writer: w,
bytesToSkip: 2,
}
soi := []byte{0xff, 0xd8}
if _, err := w.Write(soi); err != nil {
return nil, err
}
if exif != nil {
app1Marker := 0xe1
markerlen := 2 + len(exif)
marker := []byte{0xff, uint8(app1Marker), uint8(markerlen >> 8), uint8(markerlen & 0xff)}
if _, err := w.Write(marker); err != nil {
return nil, err
}
if _, err := w.Write(exif); err != nil {
return nil, err
}
}
return writer, nil
}
func (w *writerSkipper) Write(data []byte) (int, error) {
if w.bytesToSkip <= 0 {
return w.Writer.Write(data)
}
if dataLen := len(data); dataLen < w.bytesToSkip {
w.bytesToSkip -= dataLen
return dataLen, nil
}
if n, err := w.Writer.Write(data[w.bytesToSkip:]); err == nil {
n += w.bytesToSkip
w.bytesToSkip = 0
return n, nil
} else {
return n, err
}
}