Skip to content
Snippets Groups Projects
Commit c6f18e91 authored by Travis Ralston's avatar Travis Ralston
Browse files
parent d6e4cf1c
No related branches found
No related tags found
No related merge requests found
...@@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ...@@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
### Added ### Added
* New config option to set user agent when requesting URL previews. * New config option to set user agent when requesting URL previews.
* Added support for `image/jxl` thumbnailing.
### Fixed ### Fixed
......
package i
import (
"errors"
"io/ioutil"
"os"
"os/exec"
"path"
"github.com/turt2live/matrix-media-repo/common/rcontext"
"github.com/turt2live/matrix-media-repo/thumbnailing/m"
"github.com/turt2live/matrix-media-repo/util"
"github.com/turt2live/matrix-media-repo/util/cleanup"
)
type jpegxlGenerator struct {
}
func (d jpegxlGenerator) supportedContentTypes() []string {
return []string{"image/jxl"}
}
func (d jpegxlGenerator) supportsAnimation() bool {
return false
}
func (d jpegxlGenerator) matches(img []byte, contentType string) bool {
return contentType == "image/jxl"
}
func (d jpegxlGenerator) GetOriginDimensions(b []byte, contentType string, ctx rcontext.RequestContext) (bool, int, int, error) {
return false, 0, 0, nil
}
func (d jpegxlGenerator) GenerateThumbnail(b []byte, contentType string, width int, height int, method string, animated bool, ctx rcontext.RequestContext) (*m.Thumbnail, error) {
key, err := util.GenerateRandomString(16)
if err != nil {
return nil, errors.New("jpegxl: error generating temp key: " + err.Error())
}
tempFile1 := path.Join(os.TempDir(), "media_repo."+key+".1.jpegxl")
tempFile2 := path.Join(os.TempDir(), "media_repo."+key+".2.png")
defer os.Remove(tempFile1)
defer os.Remove(tempFile2)
f, err := os.OpenFile(tempFile1, os.O_RDWR|os.O_CREATE, 0640)
if err != nil {
return nil, errors.New("jpegxl: error writing temp jpegxl file: " + err.Error())
}
_, _ = f.Write(b)
cleanup.DumpAndCloseStream(f)
err = exec.Command("convert", tempFile1, tempFile2).Run()
if err != nil {
return nil, errors.New("jpegxl: error converting jpegxl file: " + err.Error())
}
b, err = ioutil.ReadFile(tempFile2)
if err != nil {
return nil, errors.New("jpegxl: error reading temp png file: " + err.Error())
}
return pngGenerator{}.GenerateThumbnail(b, "image/png", width, height, method, false, ctx)
}
func init() {
generators = append(generators, jpegxlGenerator{})
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment