From b8fe8372f2d852268878ccb982041f0b16e20060 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Mon, 2 Dec 2024 00:10:30 +0200 Subject: [PATCH] media: create blurhashes for outgoing images --- desktop/go.mod | 1 + desktop/go.sum | 2 ++ go.mod | 1 + go.sum | 2 ++ pkg/gomuks/media.go | 14 +++++++++++--- 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/desktop/go.mod b/desktop/go.mod index 539e373..ea049c1 100644 --- a/desktop/go.mod +++ b/desktop/go.mod @@ -15,6 +15,7 @@ require ( github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect github.com/alecthomas/chroma/v2 v2.14.0 // indirect github.com/bep/debounce v1.2.1 // indirect + github.com/buckket/go-blurhash v1.1.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/coder/websocket v1.8.12 // indirect diff --git a/desktop/go.sum b/desktop/go.sum index 5271d5b..3889baa 100644 --- a/desktop/go.sum +++ b/desktop/go.sum @@ -21,6 +21,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= +github.com/buckket/go-blurhash v1.1.0 h1:X5M6r0LIvwdvKiUtiNcRL2YlmOfMzYobI3VCKCZc9Do= +github.com/buckket/go-blurhash v1.1.0/go.mod h1:aT2iqo5W9vu9GpyoLErKfTHwgODsZp3bQfXjXJUxNb8= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= diff --git a/go.mod b/go.mod index 6aec257..ae0f8fc 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ toolchain go1.23.3 require ( github.com/alecthomas/chroma/v2 v2.14.0 + github.com/buckket/go-blurhash v1.1.0 github.com/chzyer/readline v1.5.1 github.com/coder/websocket v1.8.12 github.com/gabriel-vasile/mimetype v1.4.7 diff --git a/go.sum b/go.sum index 879f646..6c3193d 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/alecthomas/chroma/v2 v2.14.0 h1:R3+wzpnUArGcQz7fCETQBzO5n9IMNi13iIs46 github.com/alecthomas/chroma/v2 v2.14.0/go.mod h1:QolEbTfmUHIMVpBqxeDnNBj2uoeI4EbYP4i6n68SG4I= github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/buckket/go-blurhash v1.1.0 h1:X5M6r0LIvwdvKiUtiNcRL2YlmOfMzYobI3VCKCZc9Do= +github.com/buckket/go-blurhash v1.1.0/go.mod h1:aT2iqo5W9vu9GpyoLErKfTHwgODsZp3bQfXjXJUxNb8= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= diff --git a/pkg/gomuks/media.go b/pkg/gomuks/media.go index 149455a..0654c57 100644 --- a/pkg/gomuks/media.go +++ b/pkg/gomuks/media.go @@ -35,6 +35,7 @@ import ( "strconv" "strings" + "github.com/buckket/go-blurhash" "github.com/gabriel-vasile/mimetype" "github.com/rs/zerolog" "github.com/rs/zerolog/hlog" @@ -491,12 +492,19 @@ func (gmx *Gomuks) generateFileInfo(ctx context.Context, file *os.File) (event.M case "image": msgType = event.MsgImage defaultFileName = "image" + mimeType.Extension() - cfg, _, err := image.DecodeConfig(file) + img, _, err := image.Decode(file) if err != nil { zerolog.Ctx(ctx).Warn().Err(err).Msg("Failed to decode image config") + } else { + bounds := img.Bounds() + info.Width = bounds.Dx() + info.Height = bounds.Dy() + hash, err := blurhash.Encode(4, 3, img) + if err != nil { + zerolog.Ctx(ctx).Warn().Err(err).Msg("Failed to generate image blurhash") + } + info.AnoaBlurhash = hash } - info.Width = cfg.Width - info.Height = cfg.Height case "video": msgType = event.MsgVideo defaultFileName = "video" + mimeType.Extension()