mirror of
https://github.com/lovell/sharp.git
synced 2025-07-10 19:10:14 +02:00
Emit post-processing 'info' event for Stream-based output
This commit is contained in:
parent
bb37dc1ea6
commit
86815bc9c4
14
docs/api.md
14
docs/api.md
@ -27,6 +27,7 @@ The object returned by the constructor implements the
|
|||||||
[stream.Duplex](http://nodejs.org/api/stream.html#stream_class_stream_duplex) class.
|
[stream.Duplex](http://nodejs.org/api/stream.html#stream_class_stream_duplex) class.
|
||||||
|
|
||||||
JPEG, PNG or WebP format image data can be streamed out from this object.
|
JPEG, PNG or WebP format image data can be streamed out from this object.
|
||||||
|
When using Stream based output, derived attributes are available from the `info` event.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
sharp('input.jpg')
|
sharp('input.jpg')
|
||||||
@ -37,6 +38,19 @@ sharp('input.jpg')
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Read image data from readableStream,
|
||||||
|
// resize to 300 pixels wide,
|
||||||
|
// emit an 'info' event with calculated dimensions
|
||||||
|
// and finally write image data to writableStream
|
||||||
|
var transformer = sharp()
|
||||||
|
.resize(300)
|
||||||
|
.on('info', function(info) {
|
||||||
|
console.log('Image height is ' + info.height);
|
||||||
|
});
|
||||||
|
readableStream.pipe(transformer).pipe(writableStream);
|
||||||
|
```
|
||||||
|
|
||||||
#### metadata([callback])
|
#### metadata([callback])
|
||||||
|
|
||||||
Fast access to image metadata without decoding any compressed image data.
|
Fast access to image metadata without decoding any compressed image data.
|
||||||
|
@ -10,6 +10,10 @@
|
|||||||
[#338](https://github.com/lovell/sharp/issues/338)
|
[#338](https://github.com/lovell/sharp/issues/338)
|
||||||
[@lookfirst](https://github.com/lookfirst)
|
[@lookfirst](https://github.com/lookfirst)
|
||||||
|
|
||||||
|
* Emit post-processing 'info' event for Stream output.
|
||||||
|
[#367](https://github.com/lovell/sharp/issues/367)
|
||||||
|
[@salzhrani](https://github.com/salzhrani)
|
||||||
|
|
||||||
### v0.13 - "*mind*"
|
### v0.13 - "*mind*"
|
||||||
|
|
||||||
#### v0.13.1 - 27<sup>th</sup> February 2016
|
#### v0.13.1 - 27<sup>th</sup> February 2016
|
||||||
|
6
index.js
6
index.js
@ -803,10 +803,11 @@ Sharp.prototype._pipeline = function(callback) {
|
|||||||
if (this.options.streamIn) {
|
if (this.options.streamIn) {
|
||||||
// output=stream, input=stream
|
// output=stream, input=stream
|
||||||
this.on('finish', function() {
|
this.on('finish', function() {
|
||||||
sharp.pipeline(that.options, function(err, data) {
|
sharp.pipeline(that.options, function(err, data, info) {
|
||||||
if (err) {
|
if (err) {
|
||||||
that.emit('error', err);
|
that.emit('error', err);
|
||||||
} else {
|
} else {
|
||||||
|
that.emit('info', info);
|
||||||
that.push(data);
|
that.push(data);
|
||||||
}
|
}
|
||||||
that.push(null);
|
that.push(null);
|
||||||
@ -814,10 +815,11 @@ Sharp.prototype._pipeline = function(callback) {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// output=stream, input=file/buffer
|
// output=stream, input=file/buffer
|
||||||
sharp.pipeline(this.options, function(err, data) {
|
sharp.pipeline(this.options, function(err, data, info) {
|
||||||
if (err) {
|
if (err) {
|
||||||
that.emit('error', err);
|
that.emit('error', err);
|
||||||
} else {
|
} else {
|
||||||
|
that.emit('info', info);
|
||||||
that.push(data);
|
that.push(data);
|
||||||
}
|
}
|
||||||
that.push(null);
|
that.push(null);
|
||||||
|
@ -109,6 +109,26 @@ describe('Input/output', function() {
|
|||||||
readable.pipe(pipeline).pipe(writable);
|
readable.pipe(pipeline).pipe(writable);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Stream should emit info event', function(done) {
|
||||||
|
var readable = fs.createReadStream(fixtures.inputJpg);
|
||||||
|
var writable = fs.createWriteStream(fixtures.outputJpg);
|
||||||
|
var pipeline = sharp().resize(320, 240);
|
||||||
|
var infoEventEmitted = false;
|
||||||
|
pipeline.on('info', function(info) {
|
||||||
|
assert.strictEqual('jpeg', info.format);
|
||||||
|
assert.strictEqual(320, info.width);
|
||||||
|
assert.strictEqual(240, info.height);
|
||||||
|
assert.strictEqual(3, info.channels);
|
||||||
|
infoEventEmitted = true;
|
||||||
|
});
|
||||||
|
writable.on('finish', function() {
|
||||||
|
assert.strictEqual(true, infoEventEmitted);
|
||||||
|
fs.unlinkSync(fixtures.outputJpg);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
readable.pipe(pipeline).pipe(writable);
|
||||||
|
});
|
||||||
|
|
||||||
it('Handle Stream to Stream error ', function(done) {
|
it('Handle Stream to Stream error ', function(done) {
|
||||||
var pipeline = sharp().resize(320, 240);
|
var pipeline = sharp().resize(320, 240);
|
||||||
var anErrorWasEmitted = false;
|
var anErrorWasEmitted = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user