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