Files
opencloud/services/webdav/pkg/thumbnail/workflow/encode_imaging.go
T
Dominik Schmidt 7c95ad8e65 feat(webdav): thumbnails through a Tika server
Every file the built-in converters cannot render goes to /unpack/thumbnail
(Tika 4.1) and comes back with the image Tika marks as its thumbnail.
2026-10-07 20:28:47 +02:00

46 lines
1.1 KiB
Go

//go:build !enable_vips
package workflow
import (
"bytes"
"fmt"
"image"
"image/gif"
"image/jpeg"
"image/png"
"github.com/opencloud-eu/opencloud/services/webdav/pkg/preprocessor"
)
// encodeForUpload turns the value produced by the preprocessing step into
// bytes for upload to the generator. Raw image bytes pass through unchanged;
// converted values are encoded in-process.
func encodeForUpload(v any, mimeType string) ([]byte, string, error) {
switch data := v.(type) {
case []byte:
return data, mimeType, nil
case preprocessor.Encoded:
return data.Data, data.ContentType, nil
case image.Image:
var (
buf bytes.Buffer
err error
)
if mimeType == "image/jpeg" || mimeType == "image/jpg" {
err = jpeg.Encode(&buf, data, &jpeg.Options{Quality: 85})
return buf.Bytes(), "image/jpeg", err
}
err = png.Encode(&buf, data)
return buf.Bytes(), "image/png", err
case *gif.GIF:
var buf bytes.Buffer
if err := gif.EncodeAll(&buf, data); err != nil {
return nil, "", fmt.Errorf("encode gif: %w", err)
}
return buf.Bytes(), "image/gif", nil
default:
return nil, "", fmt.Errorf("unsupported converted type %T", v)
}
}