mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 10:30:15 +02:00
Ensure dimensions of final output image are provided (#399)
Add a failing test for vips::VError exception * fix buffer size mismatch * Loosen error message assertion * Update image
This commit is contained in:
parent
f214269aa1
commit
ef61da3051
@ -103,6 +103,7 @@ class PipelineWorker : public AsyncWorker {
|
||||
// From buffer
|
||||
if (baton->rawWidth > 0 && baton->rawHeight > 0 && baton->rawChannels > 0) {
|
||||
// Raw, uncompressed pixel data
|
||||
try {
|
||||
image = VImage::new_from_memory(baton->bufferIn, baton->bufferInLength,
|
||||
baton->rawWidth, baton->rawHeight, baton->rawChannels, VIPS_FORMAT_UCHAR);
|
||||
if (baton->rawChannels < 3) {
|
||||
@ -111,6 +112,10 @@ class PipelineWorker : public AsyncWorker {
|
||||
image.get_image()->Type = VIPS_INTERPRETATION_sRGB;
|
||||
}
|
||||
inputImageType = ImageType::RAW;
|
||||
} catch(VError const &err) {
|
||||
(baton->err).append(err.what());
|
||||
inputImageType = ImageType::UNKNOWN;
|
||||
}
|
||||
} else {
|
||||
// Compressed data
|
||||
inputImageType = DetermineImageType(baton->bufferIn, baton->bufferInLength);
|
||||
@ -656,7 +661,8 @@ class PipelineWorker : public AsyncWorker {
|
||||
|
||||
// Number of channels used in output image
|
||||
baton->channels = image.bands();
|
||||
|
||||
baton->width = image.width();
|
||||
baton->height = image.height();
|
||||
// Output
|
||||
if (baton->fileOut == "") {
|
||||
// Buffer output
|
||||
|
BIN
test/fixtures/flowers.jpeg
vendored
Normal file
BIN
test/fixtures/flowers.jpeg
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 83 KiB |
2
test/fixtures/index.js
vendored
2
test/fixtures/index.js
vendored
@ -90,6 +90,8 @@ module.exports = {
|
||||
|
||||
inputSvs: getPath('CMU-1-Small-Region.svs'), // http://openslide.cs.cmu.edu/download/openslide-testdata/Aperio/CMU-1-Small-Region.svs
|
||||
|
||||
inputJPGBig: getPath('flowers.jpeg'),
|
||||
|
||||
outputJpg: getPath('output.jpg'),
|
||||
outputPng: getPath('output.png'),
|
||||
outputWebP: getPath('output.webp'),
|
||||
|
@ -1031,4 +1031,32 @@ describe('Input/output', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it('Info event data', function(done) {
|
||||
var readable = fs.createReadStream(fixtures.inputJPGBig);
|
||||
var inPipeline = sharp()
|
||||
.resize(840)
|
||||
.raw()
|
||||
.on('info', function(info) {
|
||||
assert.strictEqual(840, info.width);
|
||||
assert.strictEqual(472, info.height);
|
||||
assert.strictEqual(3, info.channels);
|
||||
});
|
||||
var badPipeline = sharp(null, {raw: {width: 840, height: 473, channels: 3}})
|
||||
.toFormat('jpeg')
|
||||
.toBuffer(function(err, data, info) {
|
||||
assert.strictEqual(err.message.indexOf('memory area too small') > 0, true);
|
||||
readable = fs.createReadStream(fixtures.inputJPGBig);
|
||||
var goodPipeline = sharp(null, {raw: {width: 840, height: 472, channels: 3}})
|
||||
.toFormat('jpeg')
|
||||
.toBuffer(function(err, data, info) {
|
||||
if (err) throw err;
|
||||
done();
|
||||
});
|
||||
inPipeline = sharp()
|
||||
.resize(840)
|
||||
.raw();
|
||||
readable.pipe(inPipeline).pipe(goodPipeline);
|
||||
});
|
||||
readable.pipe(inPipeline).pipe(badPipeline);
|
||||
});
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user