piekarnikgosipl/templates/image.templ
2026-05-27 16:23:55 +02:00

52 lines
927 B
Text

package templates
import (
"crypto/sha256"
"encoding/hex"
"github.com/h2non/bimg"
"log"
"os"
)
func processFilename(input string) (src, dst string) {
src = "resources/images/" + input
hash := sha256.Sum256([]byte(input))
dst = "www/images/" + hex.EncodeToString(hash[:])[:16] + ".avif"
return src, dst
}
func convertToAvif(fileName string) string {
src, dst := processFilename(fileName)
_, err := os.Stat(dst)
if err == nil {
return dst[4:]
}
log.Printf("generating image: %s %s", src, dst)
buffer, err := bimg.Read(src)
if err != nil {
log.Fatal(err)
}
options := bimg.Options{
Type: bimg.AVIF,
Quality: 85,
}
newImage, err := bimg.NewImage(buffer).Process(options)
if err != nil {
log.Fatal(err)
}
if err := bimg.Write(dst, newImage); err != nil {
log.Fatal(err)
}
return dst[4:]
}
templ AvifImage(srcPath, alt string) {
<img src={ convertToAvif(srcPath) } alt={ alt }/>
}