mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 18:40:16 +02:00
Add further test case for #387, which builds on 25b63a2
This commit is contained in:
parent
25b63a2fb4
commit
24fb0c33c2
@ -49,14 +49,14 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bluebird": "^3.3.4",
|
"bluebird": "^3.3.4",
|
||||||
"color": "^0.11.1",
|
"color": "^0.11.1",
|
||||||
"nan": "^2.2.0",
|
"nan": "^2.2.1",
|
||||||
"semver": "^5.1.0",
|
"semver": "^5.1.0",
|
||||||
"request": "^2.69.0",
|
"request": "^2.69.0",
|
||||||
"tar": "^2.2.1"
|
"tar": "^2.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"async": "^1.5.2",
|
"async": "^1.5.2",
|
||||||
"coveralls": "^2.11.8",
|
"coveralls": "^2.11.9",
|
||||||
"exif-reader": "^1.0.0",
|
"exif-reader": "^1.0.0",
|
||||||
"icc": "^0.0.2",
|
"icc": "^0.0.2",
|
||||||
"istanbul": "^0.4.2",
|
"istanbul": "^0.4.2",
|
||||||
|
@ -194,7 +194,7 @@ class PipelineWorker : public AsyncWorker {
|
|||||||
// Get pre-resize image width and height
|
// Get pre-resize image width and height
|
||||||
int inputWidth = image.width();
|
int inputWidth = image.width();
|
||||||
int inputHeight = image.height();
|
int inputHeight = image.height();
|
||||||
if (baton->canvas != Canvas::IGNORE_ASPECT && !baton->rotateBeforePreExtract &&
|
if (!baton->rotateBeforePreExtract &&
|
||||||
(rotation == VIPS_ANGLE_D90 || rotation == VIPS_ANGLE_D270)) {
|
(rotation == VIPS_ANGLE_D90 || rotation == VIPS_ANGLE_D270)) {
|
||||||
// Swap input output width and height when rotating by 90 or 270 degrees
|
// Swap input output width and height when rotating by 90 or 270 degrees
|
||||||
std::swap(inputWidth, inputHeight);
|
std::swap(inputWidth, inputHeight);
|
||||||
@ -239,7 +239,10 @@ class PipelineWorker : public AsyncWorker {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Canvas::IGNORE_ASPECT:
|
case Canvas::IGNORE_ASPECT:
|
||||||
// xfactor, yfactor OK!
|
if (!baton->rotateBeforePreExtract &&
|
||||||
|
(rotation == VIPS_ANGLE_D90 || rotation == VIPS_ANGLE_D270)) {
|
||||||
|
std::swap(xfactor, yfactor);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (baton->width > 0) {
|
} else if (baton->width > 0) {
|
||||||
@ -393,7 +396,7 @@ class PipelineWorker : public AsyncWorker {
|
|||||||
// Recalculate residual float based on dimensions of required vs shrunk images
|
// Recalculate residual float based on dimensions of required vs shrunk images
|
||||||
int shrunkWidth = image.width();
|
int shrunkWidth = image.width();
|
||||||
int shrunkHeight = image.height();
|
int shrunkHeight = image.height();
|
||||||
if (baton->canvas != Canvas::IGNORE_ASPECT && !baton->rotateBeforePreExtract &&
|
if (!baton->rotateBeforePreExtract &&
|
||||||
(rotation == VIPS_ANGLE_D90 || rotation == VIPS_ANGLE_D270)) {
|
(rotation == VIPS_ANGLE_D90 || rotation == VIPS_ANGLE_D270)) {
|
||||||
// Swap input output width and height when rotating by 90 or 270 degrees
|
// Swap input output width and height when rotating by 90 or 270 degrees
|
||||||
std::swap(shrunkWidth, shrunkHeight);
|
std::swap(shrunkWidth, shrunkHeight);
|
||||||
@ -403,7 +406,12 @@ class PipelineWorker : public AsyncWorker {
|
|||||||
if (baton->canvas == Canvas::EMBED) {
|
if (baton->canvas == Canvas::EMBED) {
|
||||||
xresidual = std::min(xresidual, yresidual);
|
xresidual = std::min(xresidual, yresidual);
|
||||||
yresidual = xresidual;
|
yresidual = xresidual;
|
||||||
} else if (baton->canvas != Canvas::IGNORE_ASPECT) {
|
} else if (baton->canvas == Canvas::IGNORE_ASPECT) {
|
||||||
|
if (!baton->rotateBeforePreExtract &&
|
||||||
|
(rotation == VIPS_ANGLE_D90 || rotation == VIPS_ANGLE_D270)) {
|
||||||
|
std::swap(xresidual, yresidual);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
xresidual = std::max(xresidual, yresidual);
|
xresidual = std::max(xresidual, yresidual);
|
||||||
yresidual = xresidual;
|
yresidual = xresidual;
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,24 @@ describe('Rotation', function() {
|
|||||||
assert.strictEqual(240, metadata.height);
|
assert.strictEqual(240, metadata.height);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Rotate by 270 degrees, rectangular output ignoring aspect ratio', function(done) {
|
||||||
|
sharp(fixtures.inputJpg)
|
||||||
|
.resize(320, 240)
|
||||||
|
.ignoreAspectRatio()
|
||||||
|
.rotate(270)
|
||||||
|
.toBuffer(function(err, data, info) {
|
||||||
|
if (err) throw err;
|
||||||
|
assert.strictEqual(320, info.width);
|
||||||
|
assert.strictEqual(240, info.height);
|
||||||
|
sharp(data).metadata(function(err, metadata) {
|
||||||
|
assert.strictEqual(320, metadata.width);
|
||||||
|
assert.strictEqual(240, metadata.height);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Input image has Orientation EXIF tag but do not rotate output', function(done) {
|
it('Input image has Orientation EXIF tag but do not rotate output', function(done) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user