move epubzip

This commit is contained in:
Celogeek 2024-01-05 17:54:41 +01:00
parent 18a31c43f7
commit f34ba5a37c
Signed by: celogeek
SSH Key Fingerprint: SHA256:DEDfxIK2nUWXbslbRkww3zsauDjhWHlTXar+ak4lDJ4
5 changed files with 110 additions and 104 deletions

View File

@ -1,100 +0,0 @@
package epubzip
import (
"archive/zip"
"image"
"os"
"sync"
)
type EPUBZipStorageImageWriter struct {
fh *os.File
fz *zip.Writer
format string
mut *sync.Mutex
}
func NewEPUBZipStorageImageWriter(filename string, format string) (*EPUBZipStorageImageWriter, error) {
fh, err := os.Create(filename)
if err != nil {
return nil, err
}
fz := zip.NewWriter(fh)
return &EPUBZipStorageImageWriter{fh, fz, format, &sync.Mutex{}}, nil
}
func (e *EPUBZipStorageImageWriter) Close() error {
if err := e.fz.Close(); err != nil {
e.fh.Close()
return err
}
return e.fh.Close()
}
func (e *EPUBZipStorageImageWriter) Add(filename string, img image.Image, quality int) error {
zipImage, err := CompressImage(filename, e.format, img, quality)
if err != nil {
return err
}
e.mut.Lock()
defer e.mut.Unlock()
fh, err := e.fz.CreateRaw(zipImage.Header)
if err != nil {
return err
}
_, err = fh.Write(zipImage.Data)
if err != nil {
return err
}
return nil
}
type EPUBZipStorageImageReader struct {
filename string
fh *os.File
fz *zip.Reader
files map[string]*zip.File
}
func NewEPUBZipStorageImageReader(filename string) (*EPUBZipStorageImageReader, error) {
fh, err := os.Open(filename)
if err != nil {
return nil, err
}
s, err := fh.Stat()
if err != nil {
return nil, err
}
fz, err := zip.NewReader(fh, s.Size())
if err != nil {
return nil, err
}
files := map[string]*zip.File{}
for _, z := range fz.File {
files[z.Name] = z
}
return &EPUBZipStorageImageReader{filename, fh, fz, files}, nil
}
func (e *EPUBZipStorageImageReader) Get(filename string) *zip.File {
return e.files[filename]
}
func (e *EPUBZipStorageImageReader) Size(filename string) uint64 {
img := e.Get(filename)
if img != nil {
return img.CompressedSize64 + 30 + uint64(len(img.Name))
}
return 0
}
func (e *EPUBZipStorageImageReader) Close() error {
return e.fh.Close()
}
func (e *EPUBZipStorageImageReader) Remove() error {
return os.Remove(e.filename)
}

View File

@ -63,7 +63,7 @@ func (e *EPUBZip) Copy(fz *zip.File) error {
}
// Write image. They are already compressed, so we write them down directly.
func (e *EPUBZip) WriteRaw(raw *ZipImage) error {
func (e *EPUBZip) WriteRaw(raw *EPUBZipImage) error {
m, err := e.wz.CreateRaw(raw.Header)
if err != nil {
return err

View File

@ -12,13 +12,13 @@ import (
"time"
)
type ZipImage struct {
type EPUBZipImage struct {
Header *zip.FileHeader
Data []byte
}
// create gzip encoded jpeg
func CompressImage(filename string, format string, img image.Image, quality int) (*ZipImage, error) {
func CompressImage(filename string, format string, img image.Image, quality int) (*EPUBZipImage, error) {
var (
data, cdata bytes.Buffer
err error
@ -52,7 +52,7 @@ func CompressImage(filename string, format string, img image.Image, quality int)
}
t := time.Now()
return &ZipImage{
return &EPUBZipImage{
&zip.FileHeader{
Name: filename,
CompressedSize64: uint64(cdata.Len()),

View File

@ -0,0 +1,54 @@
package epubzip
import (
"archive/zip"
"os"
)
type EPUBZipImageReader struct {
filename string
fh *os.File
fz *zip.Reader
files map[string]*zip.File
}
func NewImageReader(filename string) (*EPUBZipImageReader, error) {
fh, err := os.Open(filename)
if err != nil {
return nil, err
}
s, err := fh.Stat()
if err != nil {
return nil, err
}
fz, err := zip.NewReader(fh, s.Size())
if err != nil {
return nil, err
}
files := map[string]*zip.File{}
for _, z := range fz.File {
files[z.Name] = z
}
return &EPUBZipImageReader{filename, fh, fz, files}, nil
}
func (e *EPUBZipImageReader) Get(filename string) *zip.File {
return e.files[filename]
}
func (e *EPUBZipImageReader) Size(filename string) uint64 {
img := e.Get(filename)
if img != nil {
return img.CompressedSize64 + 30 + uint64(len(img.Name))
}
return 0
}
func (e *EPUBZipImageReader) Close() error {
return e.fh.Close()
}
func (e *EPUBZipImageReader) Remove() error {
return os.Remove(e.filename)
}

View File

@ -0,0 +1,52 @@
package epubzip
import (
"archive/zip"
"image"
"os"
"sync"
)
type EPUBZipImageWriter struct {
fh *os.File
fz *zip.Writer
format string
mut *sync.Mutex
}
func NewImageWriter(filename string, format string) (*EPUBZipImageWriter, error) {
fh, err := os.Create(filename)
if err != nil {
return nil, err
}
fz := zip.NewWriter(fh)
return &EPUBZipImageWriter{fh, fz, format, &sync.Mutex{}}, nil
}
func (e *EPUBZipImageWriter) Close() error {
if err := e.fz.Close(); err != nil {
e.fh.Close()
return err
}
return e.fh.Close()
}
func (e *EPUBZipImageWriter) Add(filename string, img image.Image, quality int) error {
zipImage, err := CompressImage(filename, e.format, img, quality)
if err != nil {
return err
}
e.mut.Lock()
defer e.mut.Unlock()
fh, err := e.fz.CreateRaw(zipImage.Header)
if err != nil {
return err
}
_, err = fh.Write(zipImage.Data)
if err != nil {
return err
}
return nil
}