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;
|
||||
if (composite->hasOffset) {
|
||||
// Composite image at given offsets
|
||||
std::tie(left, top) = sharp::CalculateCrop(image.width(), image.height(),
|
||||
compositeImage.width(), compositeImage.height(), composite->left, composite->top);
|
||||
if (composite->tile) {
|
||||
std::tie(left, top) = sharp::CalculateCrop(image.width(), image.height(),
|
||||
compositeImage.width(), compositeImage.height(), composite->left, composite->top);
|
||||
} else {
|
||||
left = composite->left;
|
||||
top = composite->top;
|
||||
}
|
||||
} else {
|
||||
// Composite image with given gravity
|
||||
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/);
|
||||
});
|
||||
});
|
||||
|
||||
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