Skip to content

Commit

Permalink
Ensure correct dimensions when contain 1px image lovell#2951
Browse files Browse the repository at this point in the history
  • Loading branch information
lovell authored and martinj committed Mar 31, 2022
1 parent d24c71c commit ec0440b
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 2 deletions.
5 changes: 5 additions & 0 deletions docs/changelog.md
Expand Up @@ -4,6 +4,11 @@

Requires libvips v8.11.3

### v0.29.3 - TBD

* Ensure correct dimensions when containing image resized to 1px.
[#2951](https://github.com/lovell/sharp/issues/2951)

### v0.29.2 - 21st October 2021

* Add `timeout` function to limit processing time.
Expand Down
8 changes: 6 additions & 2 deletions src/pipeline.cc
Expand Up @@ -382,11 +382,15 @@ class PipelineWorker : public Napi::AsyncWorker {
// Ensure shortest edge is at least 1 pixel
if (image.width() / xfactor < 0.5) {
xfactor = 2 * image.width();
baton->width = 1;
if (baton->canvas != Canvas::EMBED) {
baton->width = 1;
}
}
if (image.height() / yfactor < 0.5) {
yfactor = 2 * image.height();
baton->height = 1;
if (baton->canvas != Canvas::EMBED) {
baton->height = 1;
}
}
image = image.resize(1.0 / xfactor, VImage::option()
->set("vscale", 1.0 / yfactor)
Expand Down
34 changes: 34 additions & 0 deletions test/unit/resize.js
Expand Up @@ -605,6 +605,40 @@ describe('Resize dimensions', function () {
});
});

it('Ensure embedded shortest edge (height) is at least 1 pixel', function () {
return sharp({
create: {
width: 200,
height: 1,
channels: 3,
background: 'red'
}
})
.resize({ width: 50, height: 50, fit: sharp.fit.contain })
.toBuffer({ resolveWithObject: true })
.then(function (output) {
assert.strictEqual(50, output.info.width);
assert.strictEqual(50, output.info.height);
});
});

it('Ensure embedded shortest edge (width) is at least 1 pixel', function () {
return sharp({
create: {
width: 1,
height: 200,
channels: 3,
background: 'red'
}
})
.resize({ width: 50, height: 50, fit: sharp.fit.contain })
.toBuffer({ resolveWithObject: true })
.then(function (output) {
assert.strictEqual(50, output.info.width);
assert.strictEqual(50, output.info.height);
});
});

it('Skip shrink-on-load where one dimension <4px', async () => {
const jpeg = await sharp({
create: {
Expand Down

0 comments on commit ec0440b

Please sign in to comment.