feat: add dithering param and parallel frame rendering for GIF
- Add dithering bool param to GIFRequest (default true) - Parallelize frame rendering with goroutines - Conditional Floyd-Steinberg dithering for speed vs quality tradeoff
This commit is contained in:
parent
0cbbe647f9
commit
fb3c4a0107
4 changed files with 29 additions and 12 deletions
|
|
@ -103,7 +103,7 @@ func (h *Handlers) HandleGIF(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
gifBytes, err := render.RenderGIF(result.GLBBytes, result.Atlas, req.Background, req.Frames, req.Width, req.Height, req.Delay)
|
||||
gifBytes, err := render.RenderGIF(result.GLBBytes, result.Atlas, req.Background, req.Frames, req.Width, req.Height, req.Delay, *req.Dithering)
|
||||
if err != nil {
|
||||
writeError(w, http.StatusInternalServerError, "render failed: "+err.Error())
|
||||
return
|
||||
|
|
|
|||
|
|
@ -200,7 +200,8 @@ const OpenAPISpec = `{
|
|||
"frames": {"type": "integer", "default": 36, "description": "Number of frames (36 = 10° per frame)"},
|
||||
"width": {"type": "integer", "default": 512, "description": "Image width in pixels"},
|
||||
"height": {"type": "integer", "default": 512, "description": "Image height in pixels"},
|
||||
"delay": {"type": "integer", "default": 5, "description": "Centiseconds between frames"}
|
||||
"delay": {"type": "integer", "default": 5, "description": "Centiseconds between frames"},
|
||||
"dithering": {"type": "boolean", "default": true, "description": "Enable Floyd-Steinberg dithering (disable for faster rendering)"}
|
||||
}
|
||||
},
|
||||
"ErrorResponse": {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ type GIFRequest struct {
|
|||
Width int `json:"width"` // default 512
|
||||
Height int `json:"height"` // default 512
|
||||
Delay int `json:"delay"` // centiseconds between frames, default 5
|
||||
Dithering *bool `json:"dithering"` // Floyd-Steinberg dithering, default true
|
||||
}
|
||||
|
||||
// ErrorResponse represents an error returned by the API
|
||||
|
|
@ -56,4 +57,8 @@ func (r *GIFRequest) ApplyDefaults() {
|
|||
if r.Background == "" {
|
||||
r.Background = "#FFFFFF"
|
||||
}
|
||||
if r.Dithering == nil {
|
||||
defaultDithering := true
|
||||
r.Dithering = &defaultDithering
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue