mirror of
https://github.com/gen2brain/cbconvert
synced 2025-10-14 10:38:51 +02:00
Fallback to IM decoding for broken images, issue #15
This commit is contained in:
57
cbconvert.go
57
cbconvert.go
@@ -185,17 +185,7 @@ func (c *Convertor) convertImage(ctx context.Context, img image.Image, index int
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch c.Opts.Format {
|
switch c.Opts.Format {
|
||||||
case "jpeg":
|
case "jpeg", "png", "tiff", "webp", "avif":
|
||||||
err = c.encodeImage(img, fileName)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
case "png":
|
|
||||||
err = c.encodeImage(img, fileName)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
case "tiff":
|
|
||||||
err = c.encodeImage(img, fileName)
|
err = c.encodeImage(img, fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -206,16 +196,6 @@ func (c *Convertor) convertImage(ctx context.Context, img image.Image, index int
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
case "webp":
|
|
||||||
err = c.encodeImage(img, fileName)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
case "avif":
|
|
||||||
err = c.encodeImage(img, fileName)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -296,9 +276,14 @@ func (c *Convertor) levelImage(img image.Image) (image.Image, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
blob := mw.GetImageBlob()
|
blob := mw.GetImageBlob()
|
||||||
i, err := c.decodeImage(bytes.NewReader(blob), "levels")
|
|
||||||
|
var i image.Image
|
||||||
|
i, err = c.decodeImage(bytes.NewReader(blob), "levels")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return img, fmt.Errorf("levelImage: %w", err)
|
i, err = c.decodeIM(bytes.NewReader(blob), "levels")
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("levelImage: %w", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return i, nil
|
return i, nil
|
||||||
@@ -397,10 +382,14 @@ func (c *Convertor) convertArchive(fileName string) error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
img, err := c.decodeImage(bytes.NewReader(data), pathName)
|
var img image.Image
|
||||||
|
img, err = c.decodeImage(bytes.NewReader(data), pathName)
|
||||||
|
if err != nil {
|
||||||
|
img, err = c.decodeIM(bytes.NewReader(data), pathName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("convertArchive: %w", err)
|
return fmt.Errorf("convertArchive: %w", err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if cover == pathName && c.Opts.NoCover {
|
if cover == pathName && c.Opts.NoCover {
|
||||||
img = c.transformImage(img)
|
img = c.transformImage(img)
|
||||||
@@ -488,9 +477,13 @@ func (c *Convertor) convertDirectory(dirPath string) error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
i, err := c.decodeImage(file, img)
|
var i image.Image
|
||||||
|
i, err = c.decodeImage(file, img)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("convertDirectory: %w", err)
|
i, err = c.decodeIM(file, img)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("coverDirectory: %w", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Opts.NoRGB && !c.isGrayScale(i) {
|
if c.Opts.NoRGB && !c.isGrayScale(i) {
|
||||||
@@ -773,10 +766,14 @@ func (c *Convertor) coverArchive(fileName string) (image.Image, error) {
|
|||||||
return nil, fmt.Errorf("coverArchive: %w", err)
|
return nil, fmt.Errorf("coverArchive: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
img, err := c.decodeImage(bytes.NewReader(data), cover)
|
var img image.Image
|
||||||
|
img, err = c.decodeImage(bytes.NewReader(data), cover)
|
||||||
|
if err != nil {
|
||||||
|
img, err = c.decodeIM(bytes.NewReader(data), cover)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("coverArchive: %w", err)
|
return nil, fmt.Errorf("coverArchive: %w", err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return img, nil
|
return img, nil
|
||||||
}
|
}
|
||||||
@@ -814,10 +811,14 @@ func (c *Convertor) coverDirectory(dir string) (image.Image, error) {
|
|||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
|
||||||
img, err := c.decodeImage(file, cover)
|
var img image.Image
|
||||||
|
img, err = c.decodeImage(file, cover)
|
||||||
|
if err != nil {
|
||||||
|
img, err = c.decodeIM(file, cover)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("coverDirectory: %w", err)
|
return nil, fmt.Errorf("coverDirectory: %w", err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return img, nil
|
return img, nil
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user