1
0
mirror of https://github.com/coalaura/ffwebp.git synced 2025-07-17 22:04:35 +00:00
Files
ffwebp/options.go
2024-09-08 00:32:52 +02:00

150 lines
3.5 KiB
Go

package main
import (
"image"
"image/gif"
"image/jpeg"
"github.com/gen2brain/avif"
"github.com/gen2brain/jpegxl"
"github.com/gen2brain/webp"
"golang.org/x/image/tiff"
)
func GetWebPOptions() webp.Options {
return webp.Options{
Lossless: arguments.GetBool("l", "lossless", false),
Quality: int(arguments.GetUint64("q", "quality", 100, 0, 100)),
Method: int(arguments.GetUint64("m", "method", 4, 0, 6)),
Exact: arguments.GetBool("x", "exact", false),
}
}
func LogWebPOptions(options webp.Options) {
info("Using output options:")
info(" - lossless: %v", options.Lossless)
info(" - quality: %v", options.Quality)
info(" - method: %v", options.Method)
info(" - exact: %v", options.Exact)
}
func GetJpegOptions() *jpeg.Options {
return &jpeg.Options{
Quality: int(arguments.GetUint64("q", "quality", 100, 0, 100)),
}
}
func LogJpegOptions(options *jpeg.Options) {
info("Using output options:")
info(" - quality: %v", options.Quality)
}
func GetGifOptions() *gif.Options {
return &gif.Options{
NumColors: int(arguments.GetUint64("c", "colors", 256, 0, 256)),
}
}
func LogGifOptions(options *gif.Options) {
info("Using output options:")
info(" - colors: %v", options.NumColors)
}
func GetTiffOptions() *tiff.Options {
return &tiff.Options{
Compression: GetTiffCompressionType(),
}
}
func LogTiffOptions(options *tiff.Options) {
info("Using output options:")
info(" - compression: %s", TiffCompressionTypeToString(options.Compression))
}
func GetAvifOptions() avif.Options {
return avif.Options{
Quality: int(arguments.GetUint64("q", "quality", 100, 0, 100)),
QualityAlpha: int(arguments.GetUint64("qa", "quality-alpha", 100, 0, 100)),
Speed: int(arguments.GetUint64("s", "speed", 6, 0, 10)),
ChromaSubsampling: GetAvifYCbCrSubsampleRatio(),
}
}
func LogAvifOptions(options avif.Options) {
info("Using output options:")
info(" - quality: %v", options.Quality)
info(" - quality-alpha: %v", options.QualityAlpha)
info(" - speed: %v", options.Speed)
info(" - chroma subsampling: %s", options.ChromaSubsampling.String())
}
func GetJxlOptions() jpegxl.Options {
return jpegxl.Options{
Quality: int(arguments.GetUint64("q", "quality", 100, 0, 100)),
Effort: int(arguments.GetUint64("e", "effort", 7, 0, 10)),
}
}
func LogJxlOptions(options jpegxl.Options) {
info("Using output options:")
info(" - quality: %v", options.Quality)
info(" - effort: %v", options.Effort)
}
func GetTiffCompressionType() tiff.CompressionType {
compression := arguments.GetUint64("z", "compression", 1, 0, 4)
switch compression {
case 0:
return tiff.Uncompressed
case 1:
return tiff.Deflate
case 2:
return tiff.LZW
case 3:
return tiff.CCITTGroup3
case 4:
return tiff.CCITTGroup4
}
return tiff.Deflate
}
func TiffCompressionTypeToString(compression tiff.CompressionType) string {
switch compression {
case tiff.Uncompressed:
return "uncompressed"
case tiff.Deflate:
return "deflate"
case tiff.LZW:
return "lzw"
case tiff.CCITTGroup3:
return "ccittgroup3"
case tiff.CCITTGroup4:
return "ccittgroup4"
default:
return "unknown"
}
}
func GetAvifYCbCrSubsampleRatio() image.YCbCrSubsampleRatio {
sampleRatio := arguments.GetUint64("r", "sample-ratio", 0, 0, 5)
switch sampleRatio {
case 0:
return image.YCbCrSubsampleRatio444
case 1:
return image.YCbCrSubsampleRatio422
case 2:
return image.YCbCrSubsampleRatio420
case 3:
return image.YCbCrSubsampleRatio440
case 4:
return image.YCbCrSubsampleRatio411
case 5:
return image.YCbCrSubsampleRatio410
}
return image.YCbCrSubsampleRatio444
}