From 2d21ced2fe10b4973b12054bbce32b0ecfd6da9b Mon Sep 17 00:00:00 2001 From: celogeek <65178+celogeek@users.noreply.github.com> Date: Sun, 16 Feb 2025 12:49:48 +0100 Subject: [PATCH] add compress raw data --- internal/pkg/epubzip/image.go | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) 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 +}