From 5ef75343d53f5f595975913f84a6ad040b04037f Mon Sep 17 00:00:00 2001 From: Laura Date: Wed, 13 Aug 2025 20:22:26 +0200 Subject: [PATCH] xcf (decode) --- README.md | 2 +- go.mod | 1 + go.sum | 2 + integration/images/image.xcf | Bin 0 -> 72161 bytes internal/builtins/xcf.go | 8 +++ internal/codec/xcf/xcf.go | 119 +++++++++++++++++++++++++++++++++++ 6 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 integration/images/image.xcf create mode 100644 internal/builtins/xcf.go create mode 100644 internal/codec/xcf/xcf.go diff --git a/README.md b/README.md index e131f2c..3a25b97 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ FFWebP is a small, single-binary CLI for converting images between formats, thin - Single binary: no external tools required - Auto-detects input codec and infers output from the file extension -- Supports AVIF, BMP, Farbfeld, GIF, HEIF/HEIC (decode-only), ICO/CUR, JPEG, JPEG XL, PCX, PNG, PNM (PBM/PGM/PPM/PAM), PSD (decode-only), QOI, SVG (decode-only), TGA, TIFF, WebP, XPM and XBM +- Supports AVIF, BMP, Farbfeld, GIF, HEIF/HEIC (decode-only), ICO/CUR, JPEG, JPEG XL, PCX, PNG, PNM (PBM/PGM/PPM/PAM), PSD (decode-only), QOI, SVG (decode-only), TGA, TIFF, WebP, XBM, XCF (decode-only) and XPM - Lossy or lossless output with configurable quality - Thumbnail generation via Lanczos3 resampling - Per-codec flags for fine-grained control (see `ffwebp --help`) diff --git a/go.mod b/go.mod index 46e5b97..fd4b1e4 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( github.com/gen2brain/heic v0.4.5 github.com/gen2brain/jpegxl v0.4.5 github.com/gen2brain/webp v0.5.5 + github.com/gonutz/xcf v0.0.0-20180404091035-c002b9533d97 github.com/hullerob/go.farbfeld v0.0.0-20181222022525-3661193c725f github.com/kriticalflare/qoi v0.0.0-20240815192827-34f66f23bcef github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 diff --git a/go.sum b/go.sum index c368a6e..3f00f2b 100644 --- a/go.sum +++ b/go.sum @@ -18,6 +18,8 @@ github.com/gen2brain/jpegxl v0.4.5 h1:TWpVEn5xkIfsswzkjHBArd0Cc9AE0tbjBSoa0jDsrb github.com/gen2brain/jpegxl v0.4.5/go.mod h1:4kWYJ18xCEuO2vzocYdGpeqNJ990/Gjy3uLMg5TBN6I= github.com/gen2brain/webp v0.5.5 h1:MvQR75yIPU/9nSqYT5h13k4URaJK3gf9tgz/ksRbyEg= github.com/gen2brain/webp v0.5.5/go.mod h1:xOSMzp4aROt2KFW++9qcK/RBTOVC2S9tJG66ip/9Oc0= +github.com/gonutz/xcf v0.0.0-20180404091035-c002b9533d97 h1:DdKf/zTPiJP9GyxSJPRW3UpsKjIXrpEQOOc+N2mXbuE= +github.com/gonutz/xcf v0.0.0-20180404091035-c002b9533d97/go.mod h1:1YB2Y6fvddxaSsiTvGp6+WWg17jt1MKhTwJWnGD1zN4= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= diff --git a/integration/images/image.xcf b/integration/images/image.xcf new file mode 100644 index 0000000000000000000000000000000000000000..39e40945a840a20e87c5012311986831451355d3 GIT binary patch literal 72161 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 0; i-- { + layer := canvas.Layers[i] + if !layer.Visible { + continue + } + + var src image.Image = layer.RGBA + + if layer.Opacity < 255 { + src = applyOpacity(src, layer.Opacity) + } + + dr := src.Bounds().Intersect(dst.Bounds()) + if dr.Empty() { + continue + } + + draw.Draw(dst, dr, src, dr.Min, draw.Over) + } + + return dst, nil +} + +func (impl) Encode(w io.Writer, img image.Image, _ opts.Common) error { + return fmt.Errorf("xcf: encoding not supported") +} + +func applyOpacity(img image.Image, opacity uint8) *image.NRGBA { + bounds := img.Bounds() + out := image.NewNRGBA(bounds) + + opa := int(opacity) + + for y := bounds.Min.Y; y < bounds.Max.Y; y++ { + for x := bounds.Min.X; x < bounds.Max.X; x++ { + r16, g16, b16, a16 := img.At(x, y).RGBA() + + r := uint8(r16 >> 8) + g := uint8(g16 >> 8) + b := uint8(b16 >> 8) + a := int(uint8(a16 >> 8)) + + a = (a*opa + 127) / 255 + + out.Set(x, y, color.NRGBA{R: r, G: g, B: b, A: uint8(a)}) + } + } + + return out +}