package main
import (
"bytes"
"encoding/base64"
"image"
_ "image/jpeg"
"image/png"
"net/http"
"time"
"github.com/nfnt/resize"
taskdaemon "github.com/jona62/TaskDaemon-Handlers/go"
)
func main() {
taskdaemon.Run(resizeImage)
}
func resizeImage(task taskdaemon.Task) taskdaemon.Result {
url, _ := task.TaskData["image_url"].(string)
width, _ := task.TaskData["width"].(float64)
height, _ := task.TaskData["height"].(float64)
// Download
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)
if err != nil {
return taskdaemon.Error(err.Error(), true) // Retryable
}
defer resp.Body.Close()
// Decode
img, _, err := image.Decode(resp.Body)
if err != nil {
return taskdaemon.Error(err.Error(), false)
}
// Resize
resized := resize.Resize(uint(width), uint(height), img, resize.Lanczos3)
// Encode
var buf bytes.Buffer
if err := png.Encode(&buf, resized); err != nil {
return taskdaemon.Error(err.Error(), false)
}
b64 := base64.StdEncoding.EncodeToString(buf.Bytes())
return taskdaemon.Success(map[string]any{
"data": b64,
"size": []int{int(width), int(height)},
"format": "png",
})
}