1
0
mirror of https://github.com/coalaura/ffwebp.git synced 2025-09-08 22:09:55 +00:00

input-only codecs

This commit is contained in:
2025-08-11 03:15:29 +02:00
parent 8b224d7dbe
commit 881b3455cb
11 changed files with 46 additions and 1 deletions

View File

@@ -15,7 +15,6 @@ import (
) )
var ( var (
quality int
qualityA int qualityA int
speed int speed int
chroma int chroma int
@@ -35,6 +34,10 @@ func (impl) Extensions() []string {
return []string{"avif"} return []string{"avif"}
} }
func (impl) CanEncode() bool {
return true
}
func (impl) Flags(flags []cli.Flag) []cli.Flag { func (impl) Flags(flags []cli.Flag) []cli.Flag {
return append(flags, return append(flags,
&cli.IntFlag{ &cli.IntFlag{

View File

@@ -26,6 +26,10 @@ func (impl) Extensions() []string {
return []string{"bmp"} return []string{"bmp"}
} }
func (impl) CanEncode() bool {
return true
}
func (impl) Flags(flags []cli.Flag) []cli.Flag { func (impl) Flags(flags []cli.Flag) []cli.Flag {
return flags return flags
} }

View File

@@ -14,6 +14,8 @@ type Codec interface {
Flags([]cli.Flag) []cli.Flag Flags([]cli.Flag) []cli.Flag
Extensions() []string Extensions() []string
CanEncode() bool
Sniff(io.ReaderAt) (int, []byte, error) Sniff(io.ReaderAt) (int, []byte, error)
Decode(io.Reader) (image.Image, error) Decode(io.Reader) (image.Image, error)
Encode(io.Writer, image.Image, opts.Common) error Encode(io.Writer, image.Image, opts.Common) error

View File

@@ -78,6 +78,10 @@ func Detect(output, override string) (Codec, error) {
return nil, fmt.Errorf("unsupported output codec: %q", override) return nil, fmt.Errorf("unsupported output codec: %q", override)
} }
if !codec.CanEncode() {
return nil, fmt.Errorf("decode-only output codec: %q", override)
}
return codec, nil return codec, nil
} }
@@ -93,6 +97,10 @@ func Detect(output, override string) (Codec, error) {
for _, codec := range codecs { for _, codec := range codecs {
for _, alias := range codec.Extensions() { for _, alias := range codec.Extensions() {
if ext == strings.ToLower(alias) { if ext == strings.ToLower(alias) {
if !codec.CanEncode() {
return nil, fmt.Errorf("decode-only output codec: %q", override)
}
return codec, nil return codec, nil
} }
} }

View File

@@ -29,6 +29,10 @@ func (impl) Extensions() []string {
return []string{"gif"} return []string{"gif"}
} }
func (impl) CanEncode() bool {
return true
}
func (impl) Flags(flags []cli.Flag) []cli.Flag { func (impl) Flags(flags []cli.Flag) []cli.Flag {
return append(flags, &cli.IntFlag{ return append(flags, &cli.IntFlag{
Name: "gif.colors", Name: "gif.colors",

View File

@@ -30,6 +30,10 @@ func (impl) Flags(flags []cli.Flag) []cli.Flag {
return flags return flags
} }
func (impl) CanEncode() bool {
return true
}
func (impl) Sniff(reader io.ReaderAt) (int, []byte, error) { func (impl) Sniff(reader io.ReaderAt) (int, []byte, error) {
magicICO := []byte{0x00, 0x00, 0x01, 0x00} magicICO := []byte{0x00, 0x00, 0x01, 0x00}
magicCUR := []byte{0x00, 0x00, 0x02, 0x00} magicCUR := []byte{0x00, 0x00, 0x02, 0x00}

View File

@@ -30,6 +30,10 @@ func (impl) Flags(flags []cli.Flag) []cli.Flag {
return flags return flags
} }
func (impl) CanEncode() bool {
return true
}
func (impl) Sniff(reader io.ReaderAt) (int, []byte, error) { func (impl) Sniff(reader io.ReaderAt) (int, []byte, error) {
magic := []byte{0xFF, 0xD8, 0xFF} magic := []byte{0xFF, 0xD8, 0xFF}

View File

@@ -32,6 +32,10 @@ func (impl) Extensions() []string {
return []string{"jxl"} return []string{"jxl"}
} }
func (impl) CanEncode() bool {
return true
}
func (impl) Flags(flags []cli.Flag) []cli.Flag { func (impl) Flags(flags []cli.Flag) []cli.Flag {
return append(flags, return append(flags,
&cli.IntFlag{ &cli.IntFlag{

View File

@@ -31,6 +31,10 @@ func (impl) Extensions() []string {
return []string{"png"} return []string{"png"}
} }
func (impl) CanEncode() bool {
return true
}
func (impl) Flags(flags []cli.Flag) []cli.Flag { func (impl) Flags(flags []cli.Flag) []cli.Flag {
return append(flags, &cli.IntFlag{ return append(flags, &cli.IntFlag{
Name: "png.compression", Name: "png.compression",

View File

@@ -33,6 +33,10 @@ func (impl) Extensions() []string {
return []string{"tiff", "tif"} return []string{"tiff", "tif"}
} }
func (impl) CanEncode() bool {
return true
}
func (impl) Flags(flags []cli.Flag) []cli.Flag { func (impl) Flags(flags []cli.Flag) []cli.Flag {
return append(flags, return append(flags,
&cli.IntFlag{ &cli.IntFlag{

View File

@@ -33,6 +33,10 @@ func (impl) Extensions() []string {
return []string{"webp"} return []string{"webp"}
} }
func (impl) CanEncode() bool {
return true
}
func (impl) Flags(flags []cli.Flag) []cli.Flag { func (impl) Flags(flags []cli.Flag) []cli.Flag {
return append(flags, return append(flags,
&cli.IntFlag{ &cli.IntFlag{