1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2025-10-30 23:08:02 +02:00

Expose runner from pipeline context

This commit is contained in:
DarthSim
2025-09-18 20:48:22 +03:00
parent b5d2cce37a
commit 7ebf913f98
3 changed files with 32 additions and 19 deletions

View File

@@ -13,6 +13,9 @@ import (
// NOTE: this will be called pipeline.Context in the separate package
type Context struct {
// The runner that runs this pipeline
runner *Runner
Ctx context.Context
// Global processing configuration which could be used by individual steps
@@ -127,6 +130,8 @@ func (r *Runner) newContext(
imgdata imagedata.ImageData,
) Context {
pctx := Context{
runner: r,
Ctx: ctx,
Config: r.config,
Img: img,
@@ -149,3 +154,7 @@ func (r *Runner) newContext(
return pctx
}
func (c *Context) Runner() *Runner {
return c.runner
}

View File

@@ -417,6 +417,13 @@ func transformAnimated(
po *options.ProcessingOptions,
watermark auximageprovider.Provider,
) error {
// NOTE: THIS IS TEMPORARY
runner, rerr := tmpNewRunner(watermark)
if rerr != nil {
return rerr
}
// NOTE: END TEMPORARY BLOCK
if po.Trim.Enabled {
log.Warning("Trim is not supported for animated images")
po.Trim.Enabled = false
@@ -467,13 +474,6 @@ func transformAnimated(
frames = append(frames, frame)
// NOTE: THIS IS TEMPORARY
runner, rerr := tmpNewRunner(watermark)
if rerr != nil {
return rerr
}
// NOTE: END TEMPORARY BLOCK
// Transform the frame using the main pipeline.
// We don't provide imgdata here to prevent scale-on-load.
// Watermarking is disabled for individual frames (see above)
@@ -509,7 +509,7 @@ func transformAnimated(
dprScale = 1.0
}
if err = applyWatermark(ctx, img, watermark, po, dprScale, framesCount); err != nil {
if err = applyWatermark(ctx, runner, img, watermark, po, dprScale, framesCount); err != nil {
return err
}
}

View File

@@ -22,7 +22,15 @@ var watermarkPipeline = Pipeline{
padding,
}
func prepareWatermark(wm *vips.Image, wmData imagedata.ImageData, po *options.ProcessingOptions, imgWidth, imgHeight int, offsetScale float64, framesCount int) error {
func prepareWatermark(
ctx context.Context,
runner *Runner,
wm *vips.Image,
wmData imagedata.ImageData,
po *options.ProcessingOptions,
imgWidth, imgHeight int,
offsetScale float64,
) error {
if err := wm.Load(wmData, 1, 1.0, 1); err != nil {
return err
}
@@ -62,14 +70,7 @@ func prepareWatermark(wm *vips.Image, wmData imagedata.ImageData, po *options.Pr
wmPo.Padding.Bottom = offY - wmPo.Padding.Top
}
// NOTE: THIS IS TEMPORARY
runner, err := tmpNewRunner(nil) // watermark will present in runner
if err != nil {
return err
}
// NOTE: END TEMPORARY BLOCK
if err := runner.Run(watermarkPipeline, context.Background(), wm, wmPo, wmData); err != nil {
if err := runner.Run(watermarkPipeline, ctx, wm, wmPo, wmData); err != nil {
return err
}
@@ -91,6 +92,7 @@ func prepareWatermark(wm *vips.Image, wmData imagedata.ImageData, po *options.Pr
func applyWatermark(
ctx context.Context,
runner *Runner,
img *vips.Image,
watermark auximageprovider.Provider,
po *options.ProcessingOptions,
@@ -119,7 +121,9 @@ func applyWatermark(
height := img.Height()
frameHeight := height / framesCount
if err := prepareWatermark(wm, wmData, po, width, frameHeight, offsetScale, framesCount); err != nil {
if err := prepareWatermark(
ctx, runner, wm, wmData, po, width, frameHeight, offsetScale,
); err != nil {
return err
}
@@ -198,5 +202,5 @@ func watermark(c *Context) error {
return nil
}
return applyWatermark(c.Ctx, c.Img, c.WatermarkProvider, c.PO, c.DprScale, 1)
return applyWatermark(c.Ctx, c.Runner(), c.Img, c.WatermarkProvider, c.PO, c.DprScale, 1)
}