summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorunwox <me@unwox.com>2025-09-04 19:53:35 +0600
committerunwox <me@unwox.com>2025-09-04 19:53:48 +0600
commit828043e05bff1871f31d9786dbf67c1fc9819f48 (patch)
tree55f9637ccfd7f569aa911011473d8c37c0571a60 /main.go
parent491b557ea67674a9181f013319354e5cf037533a (diff)
add image api module
Diffstat (limited to 'main.go')
-rw-r--r--main.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/main.go b/main.go
index d8614ae..35ed343 100644
--- a/main.go
+++ b/main.go
@@ -8,6 +8,9 @@ import (
"errors"
"flag"
"fmt"
+ "image"
+ "image/jpeg"
+ "image/png"
"io"
"log"
"net/http"
@@ -21,6 +24,7 @@ import (
"time"
_ "github.com/mattn/go-sqlite3"
+ "github.com/nfnt/resize"
)
var debug bool
@@ -478,6 +482,45 @@ func main() {
return luaOk(l, res)
}
+ imageModule := make(map[string]any)
+ imageModule["create-thumbnail"] = func (l *Lua) int {
+ var in, out string
+ var width int
+ err := l.Scan(&in, &out, &width)
+ if err != nil {
+ return luaErr(l, err)
+ }
+ file, err := os.Open(in)
+ if err != nil {
+ return luaErr(l, err)
+ }
+ defer file.Close()
+ mimetype, err := mimetype(file)
+ if err != nil {
+ return luaErr(l, err)
+ }
+ var img image.Image
+ if mimetype == "image/jpeg" {
+ img, err = jpeg.Decode(file)
+ } else if mimetype == "image/png" {
+ img, err = png.Decode(file)
+ } else {
+ return luaErr(l, errors.New("unknown image type: only jpeg and png are supported"))
+ }
+ if err != nil {
+ return luaErr(l, err)
+ }
+ resizedImg := resize.Resize(uint(width), 0, img, resize.Lanczos3)
+ outFile, err := os.Create(out)
+ if err != nil {
+ return luaErr(l, err)
+ }
+ defer outFile.Close()
+ jpeg.Encode(outFile, resizedImg, nil)
+ return luaOk(l, nil)
+ }
+ imageModule["createThumbnail"] = imageModule["create-thumbnail"]
+
cryptoModule := make(map[string]any)
cryptoModule["sha1"] = func (l *Lua) int {
var str string
@@ -496,6 +539,7 @@ func main() {
module["db"] = dbModule
module["utf8"] = utf8Module
module["fs"] = fsModule
+ module["image"] = imageModule
module["crypto"] = cryptoModule
module["on-eval"] = func (l *Lua) int {
var evalFn LuaRef