mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 10:30:15 +02:00
Ensure extend op is sequential for multi-page TIFF #4069
This commit is contained in:
parent
52b9dc0f63
commit
397ee492d9
@ -18,6 +18,9 @@ Requires libvips v8.15.2
|
||||
* Expose `bilinear` resizing kernel (and interpolator).
|
||||
[#4061](https://github.com/lovell/sharp/issues/4061)
|
||||
|
||||
* Ensure `extend` operation stays sequential for multi-page TIFF (regression in 0.32.0).
|
||||
[#4069](https://github.com/lovell/sharp/issues/4069)
|
||||
|
||||
### v0.33.3 - 23rd March 2024
|
||||
|
||||
* Upgrade to libvips v8.15.2 for upstream bug fixes.
|
||||
|
@ -566,6 +566,7 @@ class PipelineWorker : public Napi::AsyncWorker {
|
||||
std::vector<double> background;
|
||||
std::tie(image, background) = sharp::ApplyAlpha(image, baton->extendBackground, shouldPremultiplyAlpha);
|
||||
|
||||
image = sharp::StaySequential(image, baton->input->access, nPages > 1);
|
||||
image = nPages > 1
|
||||
? sharp::EmbedMultiPage(image,
|
||||
baton->extendLeft, baton->extendTop, baton->width, baton->height,
|
||||
|
@ -73,20 +73,6 @@ describe('Extend', function () {
|
||||
});
|
||||
});
|
||||
|
||||
it('extend top with mirroring uses ordered read', async () => {
|
||||
const data = await sharp(fixtures.inputJpg)
|
||||
.extend({
|
||||
extendWith: 'mirror',
|
||||
top: 1
|
||||
})
|
||||
.png({ compressionLevel: 0 })
|
||||
.toBuffer();
|
||||
|
||||
const { width, height } = await sharp(data).metadata();
|
||||
assert.strictEqual(2725, width);
|
||||
assert.strictEqual(2226, height);
|
||||
});
|
||||
|
||||
it(`extend sides unequally with RGBA (${extendWith})`, function (done) {
|
||||
sharp(fixtures.inputPngWithTransparency16bit)
|
||||
.resize(120)
|
||||
@ -127,6 +113,39 @@ describe('Extend', function () {
|
||||
});
|
||||
});
|
||||
|
||||
it('extend top with mirroring uses ordered read', async () => {
|
||||
const data = await sharp(fixtures.inputJpg)
|
||||
.extend({
|
||||
extendWith: 'mirror',
|
||||
top: 1
|
||||
})
|
||||
.png({ compressionLevel: 0 })
|
||||
.toBuffer();
|
||||
|
||||
const { width, height } = await sharp(data).metadata();
|
||||
assert.strictEqual(2725, width);
|
||||
assert.strictEqual(2226, height);
|
||||
});
|
||||
|
||||
it('multi-page extend uses ordered read', async () => {
|
||||
const multiPageTiff = await sharp(fixtures.inputGifAnimated, { animated: true })
|
||||
.resize({ width: 8, height: 48 })
|
||||
.tiff()
|
||||
.toBuffer();
|
||||
|
||||
const data = await sharp(multiPageTiff, { pages: -1 })
|
||||
.extend({
|
||||
background: 'red',
|
||||
top: 1
|
||||
})
|
||||
.png({ compressionLevel: 0 })
|
||||
.toBuffer();
|
||||
|
||||
const { width, height } = await sharp(data).metadata();
|
||||
assert.strictEqual(8, width);
|
||||
assert.strictEqual(1470, height);
|
||||
});
|
||||
|
||||
it('missing parameter fails', function () {
|
||||
assert.throws(function () {
|
||||
sharp().extend();
|
||||
|
Loading…
x
Reference in New Issue
Block a user