52 lines
927 B
Text
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 }/>
|
|
}
|