mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 18:40:16 +02:00
Fix erroneous top/left clipping in composite #2571
Fixes bug where certain input values for top/left parameters in composite can conflict with clipping logic, resulting in inaccurate alignment in output.
This commit is contained in:
parent
83fe65b9e9
commit
34a2e14a14
@ -602,8 +602,13 @@ class PipelineWorker : public Napi::AsyncWorker {
|
|||||||
int top;
|
int top;
|
||||||
if (composite->hasOffset) {
|
if (composite->hasOffset) {
|
||||||
// Composite image at given offsets
|
// Composite image at given offsets
|
||||||
|
if (composite->tile) {
|
||||||
std::tie(left, top) = sharp::CalculateCrop(image.width(), image.height(),
|
std::tie(left, top) = sharp::CalculateCrop(image.width(), image.height(),
|
||||||
compositeImage.width(), compositeImage.height(), composite->left, composite->top);
|
compositeImage.width(), compositeImage.height(), composite->left, composite->top);
|
||||||
|
} else {
|
||||||
|
left = composite->left;
|
||||||
|
top = composite->top;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Composite image with given gravity
|
// Composite image with given gravity
|
||||||
std::tie(left, top) = sharp::CalculateCrop(image.width(), image.height(),
|
std::tie(left, top) = sharp::CalculateCrop(image.width(), image.height(),
|
||||||
|
@ -408,4 +408,20 @@ describe('composite', () => {
|
|||||||
}, /Expected valid gravity for gravity but received invalid of type string/);
|
}, /Expected valid gravity for gravity but received invalid of type string/);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Allow offset beyond bottom/right edge', async () => {
|
||||||
|
const red = { r: 255, g: 0, b: 0 };
|
||||||
|
const blue = { r: 0, g: 0, b: 255 };
|
||||||
|
|
||||||
|
const [r, g, b] = await sharp({ create: { width: 2, height: 2, channels: 4, background: red } })
|
||||||
|
.composite([{
|
||||||
|
input: { create: { width: 2, height: 2, channels: 4, background: blue } },
|
||||||
|
top: 1,
|
||||||
|
left: 1
|
||||||
|
}])
|
||||||
|
.raw()
|
||||||
|
.toBuffer();
|
||||||
|
|
||||||
|
assert.deepStrictEqual(red, { r, g, b });
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user