diff --git a/internal/pkg/epubzip/image.go b/internal/pkg/epubzip/image.go index df87c4f..af479a6 100644 --- a/internal/pkg/epubzip/image.go +++ b/internal/pkg/epubzip/image.go @@ -66,3 +66,39 @@ func CompressImage(filename string, format string, img image.Image, quality int) cdata.Bytes(), }, nil } + +func CompressRaw(filename string, uncompressedData []byte) (Image, error) { + var ( + cdata bytes.Buffer + err error + ) + wcdata, err := flate.NewWriter(&cdata, flate.BestCompression) + if err != nil { + return Image{}, err + } + + _, err = wcdata.Write(uncompressedData) + if err != nil { + return Image{}, err + } + + err = wcdata.Close() + if err != nil { + return Image{}, err + } + + t := time.Now() + //goland:noinspection GoDeprecation + return Image{ + &zip.FileHeader{ + Name: filename, + CompressedSize64: uint64(cdata.Len()), + UncompressedSize64: uint64(len(uncompressedData)), + CRC32: crc32.Checksum(uncompressedData, crc32.IEEETable), + Method: zip.Deflate, + ModifiedTime: uint16(t.Second()/2 + t.Minute()<<5 + t.Hour()<<11), + ModifiedDate: uint16(t.Day() + int(t.Month())<<5 + (t.Year()-1980)<<9), + }, + cdata.Bytes(), + }, nil +}