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:
@@ -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{
|
||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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",
|
||||||
|
@@ -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}
|
||||||
|
@@ -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}
|
||||||
|
|
||||||
|
@@ -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{
|
||||||
|
@@ -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",
|
||||||
|
@@ -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{
|
||||||
|
@@ -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{
|
||||||
|
Reference in New Issue
Block a user