mirror of
https://github.com/celogeek/go-comic-converter.git
synced 2025-05-24 15:52:38 +02:00
move epubzip
This commit is contained in:
parent
18a31c43f7
commit
f34ba5a37c
@ -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)
|
||||
}
|
@ -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
|
@ -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()),
|
54
internal/epubzip/epubzip_image_reader.go
Normal file
54
internal/epubzip/epubzip_image_reader.go
Normal 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)
|
||||
}
|
52
internal/epubzip/epubzip_image_writer.go
Normal file
52
internal/epubzip/epubzip_image_writer.go
Normal 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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user