Add support for png and gif without alpha channels
This commit is contained in:
parent
626ba8d0ef
commit
92f16b2d37
20
main.go
20
main.go
|
@ -3,7 +3,9 @@ package main
|
|||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"image/gif"
|
||||
"image/jpeg"
|
||||
"image/png"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
@ -18,6 +20,8 @@ type config struct {
|
|||
Quality uint
|
||||
Replace bool
|
||||
StartingPath string
|
||||
PNG bool
|
||||
GIF bool
|
||||
Quiet bool
|
||||
AtLeast uint
|
||||
MaxWidth uint
|
||||
|
@ -40,6 +44,8 @@ func main() {
|
|||
flag.UintVar(&c.Diff, "diff", 25, "Percent difference required to replace original image.")
|
||||
flag.UintVar(&c.Quality, "quality", 85, "JPG compression quality level.")
|
||||
flag.BoolVar(&c.Quiet, "quiet", false, "Less output - don't print per-file detail")
|
||||
flag.BoolVar(&c.PNG, "png", false, "Convert PNG files without transparency to JPG if the other criteria are met")
|
||||
flag.BoolVar(&c.GIF, "gif", false, "Convert GIF files without transparency to JPG if the other criteria are met")
|
||||
flag.UintVar(&c.AtLeast, "atleast", 0, "Ignore images that aren't at least this many kilobytes")
|
||||
flag.BoolVar(&c.IgnoreSuffix, "ignoresuffix", false, "Ignore suffix on filenames and attempt to treat everything as a JPG")
|
||||
flag.UintVar(&c.MaxWidth, "maxwidth", 0, "Maximum width, scale images bigger to fit within this width. 0 ignores. Won't replace unless it meets the diff threashold.")
|
||||
|
@ -77,7 +83,7 @@ func main() {
|
|||
for _, f := range d {
|
||||
if !f.IsDir() {
|
||||
ext := strings.ToLower(filepath.Ext(f.Name()))
|
||||
if c.IgnoreSuffix || ext == ".jpg" || ext == ".jpeg" {
|
||||
if c.IgnoreSuffix || ext == ".jpg" || ext == ".jpeg" || ext==".png" || ext==".gif" {
|
||||
filelist = append(filelist, f.Name())
|
||||
}
|
||||
|
||||
|
@ -86,7 +92,7 @@ func main() {
|
|||
} else {
|
||||
filepath.WalkDir(c.StartingPath, func(path string, d fs.DirEntry, err error) error {
|
||||
ext := strings.ToLower(filepath.Ext(path))
|
||||
if !d.IsDir() && (c.IgnoreSuffix || ext == ".jpg" || ext == ".jpeg") {
|
||||
if !d.IsDir() && (c.IgnoreSuffix || ext == ".jpg" || ext == ".jpeg" || ext==".png" || ext==".gif" ) {
|
||||
filelist = append(filelist, path)
|
||||
}
|
||||
return nil
|
||||
|
@ -127,8 +133,14 @@ func doSingleImage(f string, c config, s stats) stats {
|
|||
defer in.Close()
|
||||
orig, err := jpeg.Decode(in)
|
||||
if err != nil {
|
||||
fmt.Printf("Couldn't decode source image %s: %s\n", f, err.Error())
|
||||
return s
|
||||
orig,err=png.Decode(in)
|
||||
if err!=nil {
|
||||
orig,err=gif.Decode(in)
|
||||
if err != nil {
|
||||
fmt.Printf("Couldn't decode source image %s: %s\n", f, err.Error())
|
||||
return s
|
||||
}
|
||||
}
|
||||
}
|
||||
in.Close()
|
||||
// Check bounds and resize if necessary
|
||||
|
|
Loading…
Reference in New Issue