set static naive JFIF headers for compatibility with kindle

This commit is contained in:
Celogeek 2024-06-18 12:41:15 +02:00
parent 47205b16be
commit d1265a5135
Signed by: celogeek
SSH Key Fingerprint: SHA256:njNJLzoLQdbV9PC6ehcruRb0QnEgxABoCYZ+0+aUIYc

View File

@ -17,6 +17,18 @@ type Image struct {
Data []byte
}
var naiveJFIFHeader = []byte{
0xFF, 0xD8, // SOI
0xFF, 0xE0, // APP0 Marker
0x00, 0x10, // Length
0x4A, 0x46, 0x49, 0x46, 0x00, // JFIF\0
0x01, 0x02, // 1.02
0x00, // Density type
0x00, 0x01, // X Density
0x00, 0x01, // Y Density
0x00, 0x00, // No Thumbnail
}
// CompressImage create gzip encoded jpeg
func CompressImage(filename string, format string, img image.Image, quality int) (Image, error) {
var (
@ -28,7 +40,11 @@ func CompressImage(filename string, format string, img image.Image, quality int)
case "png":
err = png.Encode(&data, img)
case "jpeg":
err = jpeg.Encode(&data, img, &jpeg.Options{Quality: quality})
// static JFIF header for better compatibility with Kindle devices
var b bytes.Buffer
err = jpeg.Encode(&b, img, &jpeg.Options{Quality: quality})
data.Write(naiveJFIFHeader)
data.Write(b.Bytes()[2:])
default:
err = fmt.Errorf("unknown format %q", format)
}