mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 18:40:16 +02:00
Add size to metadata response (Stream/Buffer only) #695
This commit is contained in:
parent
17f942c802
commit
db4df6f0b2
@ -25,6 +25,7 @@ Fast access to (uncached) image metadata without decoding any compressed image d
|
|||||||
A Promises/A+ promise is returned when `callback` is not provided.
|
A Promises/A+ promise is returned when `callback` is not provided.
|
||||||
|
|
||||||
- `format`: Name of decoder used to decompress image data e.g. `jpeg`, `png`, `webp`, `gif`, `svg`
|
- `format`: Name of decoder used to decompress image data e.g. `jpeg`, `png`, `webp`, `gif`, `svg`
|
||||||
|
- `size`: Total size of image in bytes, for Stream and Buffer input only
|
||||||
- `width`: Number of pixels wide (EXIF orientation is not taken into consideration)
|
- `width`: Number of pixels wide (EXIF orientation is not taken into consideration)
|
||||||
- `height`: Number of pixels high (EXIF orientation is not taken into consideration)
|
- `height`: Number of pixels high (EXIF orientation is not taken into consideration)
|
||||||
- `space`: Name of colour space interpretation e.g. `srgb`, `rgb`, `cmyk`, `lab`, `b-w` [...][1]
|
- `space`: Name of colour space interpretation e.g. `srgb`, `rgb`, `cmyk`, `lab`, `b-w` [...][1]
|
||||||
|
@ -19,6 +19,9 @@ Requires libvips v8.7.0.
|
|||||||
Per-operation `background` options added to `resize`, `extend` and `flatten` operations.
|
Per-operation `background` options added to `resize`, `extend` and `flatten` operations.
|
||||||
[#1392](https://github.com/lovell/sharp/issues/1392)
|
[#1392](https://github.com/lovell/sharp/issues/1392)
|
||||||
|
|
||||||
|
* Add `size` to `metadata` response (Stream and Buffer input only).
|
||||||
|
[#695](https://github.com/lovell/sharp/issues/695)
|
||||||
|
|
||||||
* Switch from custom trim operation to `vips_find_trim`.
|
* Switch from custom trim operation to `vips_find_trim`.
|
||||||
[#914](https://github.com/lovell/sharp/issues/914)
|
[#914](https://github.com/lovell/sharp/issues/914)
|
||||||
|
|
||||||
|
@ -177,6 +177,7 @@ function clone () {
|
|||||||
* A Promises/A+ promise is returned when `callback` is not provided.
|
* A Promises/A+ promise is returned when `callback` is not provided.
|
||||||
*
|
*
|
||||||
* - `format`: Name of decoder used to decompress image data e.g. `jpeg`, `png`, `webp`, `gif`, `svg`
|
* - `format`: Name of decoder used to decompress image data e.g. `jpeg`, `png`, `webp`, `gif`, `svg`
|
||||||
|
* - `size`: Total size of image in bytes, for Stream and Buffer input only
|
||||||
* - `width`: Number of pixels wide (EXIF orientation is not taken into consideration)
|
* - `width`: Number of pixels wide (EXIF orientation is not taken into consideration)
|
||||||
* - `height`: Number of pixels high (EXIF orientation is not taken into consideration)
|
* - `height`: Number of pixels high (EXIF orientation is not taken into consideration)
|
||||||
* - `space`: Name of colour space interpretation e.g. `srgb`, `rgb`, `cmyk`, `lab`, `b-w` [...](https://github.com/libvips/libvips/blob/master/libvips/iofuncs/enumtypes.c#L636)
|
* - `space`: Name of colour space interpretation e.g. `srgb`, `rgb`, `cmyk`, `lab`, `b-w` [...](https://github.com/libvips/libvips/blob/master/libvips/iofuncs/enumtypes.c#L636)
|
||||||
|
@ -123,6 +123,9 @@ class MetadataWorker : public Nan::AsyncWorker {
|
|||||||
// Metadata Object
|
// Metadata Object
|
||||||
v8::Local<v8::Object> info = New<v8::Object>();
|
v8::Local<v8::Object> info = New<v8::Object>();
|
||||||
Set(info, New("format").ToLocalChecked(), New<v8::String>(baton->format).ToLocalChecked());
|
Set(info, New("format").ToLocalChecked(), New<v8::String>(baton->format).ToLocalChecked());
|
||||||
|
if (baton->input->bufferLength > 0) {
|
||||||
|
Set(info, New("size").ToLocalChecked(), New<v8::Uint32>(static_cast<uint32_t>(baton->input->bufferLength)));
|
||||||
|
}
|
||||||
Set(info, New("width").ToLocalChecked(), New<v8::Uint32>(baton->width));
|
Set(info, New("width").ToLocalChecked(), New<v8::Uint32>(baton->width));
|
||||||
Set(info, New("height").ToLocalChecked(), New<v8::Uint32>(baton->height));
|
Set(info, New("height").ToLocalChecked(), New<v8::Uint32>(baton->height));
|
||||||
Set(info, New("space").ToLocalChecked(), New<v8::String>(baton->space).ToLocalChecked());
|
Set(info, New("space").ToLocalChecked(), New<v8::String>(baton->space).ToLocalChecked());
|
||||||
|
@ -13,6 +13,7 @@ describe('Image metadata', function () {
|
|||||||
sharp(fixtures.inputJpg).metadata(function (err, metadata) {
|
sharp(fixtures.inputJpg).metadata(function (err, metadata) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
assert.strictEqual('jpeg', metadata.format);
|
assert.strictEqual('jpeg', metadata.format);
|
||||||
|
assert.strictEqual('undefined', typeof metadata.size);
|
||||||
assert.strictEqual(2725, metadata.width);
|
assert.strictEqual(2725, metadata.width);
|
||||||
assert.strictEqual(2225, metadata.height);
|
assert.strictEqual(2225, metadata.height);
|
||||||
assert.strictEqual('srgb', metadata.space);
|
assert.strictEqual('srgb', metadata.space);
|
||||||
@ -34,6 +35,7 @@ describe('Image metadata', function () {
|
|||||||
sharp(fixtures.inputJpgWithExif).metadata(function (err, metadata) {
|
sharp(fixtures.inputJpgWithExif).metadata(function (err, metadata) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
assert.strictEqual('jpeg', metadata.format);
|
assert.strictEqual('jpeg', metadata.format);
|
||||||
|
assert.strictEqual('undefined', typeof metadata.size);
|
||||||
assert.strictEqual(450, metadata.width);
|
assert.strictEqual(450, metadata.width);
|
||||||
assert.strictEqual(600, metadata.height);
|
assert.strictEqual(600, metadata.height);
|
||||||
assert.strictEqual('srgb', metadata.space);
|
assert.strictEqual('srgb', metadata.space);
|
||||||
@ -83,6 +85,7 @@ describe('Image metadata', function () {
|
|||||||
sharp(fixtures.inputTiff).metadata(function (err, metadata) {
|
sharp(fixtures.inputTiff).metadata(function (err, metadata) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
assert.strictEqual('tiff', metadata.format);
|
assert.strictEqual('tiff', metadata.format);
|
||||||
|
assert.strictEqual('undefined', typeof metadata.size);
|
||||||
assert.strictEqual(2464, metadata.width);
|
assert.strictEqual(2464, metadata.width);
|
||||||
assert.strictEqual(3248, metadata.height);
|
assert.strictEqual(3248, metadata.height);
|
||||||
assert.strictEqual('b-w', metadata.space);
|
assert.strictEqual('b-w', metadata.space);
|
||||||
@ -104,6 +107,7 @@ describe('Image metadata', function () {
|
|||||||
sharp(fixtures.inputPng).metadata(function (err, metadata) {
|
sharp(fixtures.inputPng).metadata(function (err, metadata) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
assert.strictEqual('png', metadata.format);
|
assert.strictEqual('png', metadata.format);
|
||||||
|
assert.strictEqual('undefined', typeof metadata.size);
|
||||||
assert.strictEqual(2809, metadata.width);
|
assert.strictEqual(2809, metadata.width);
|
||||||
assert.strictEqual(2074, metadata.height);
|
assert.strictEqual(2074, metadata.height);
|
||||||
assert.strictEqual('b-w', metadata.space);
|
assert.strictEqual('b-w', metadata.space);
|
||||||
@ -125,6 +129,7 @@ describe('Image metadata', function () {
|
|||||||
sharp(fixtures.inputPngWithTransparency).metadata(function (err, metadata) {
|
sharp(fixtures.inputPngWithTransparency).metadata(function (err, metadata) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
assert.strictEqual('png', metadata.format);
|
assert.strictEqual('png', metadata.format);
|
||||||
|
assert.strictEqual('undefined', typeof metadata.size);
|
||||||
assert.strictEqual(2048, metadata.width);
|
assert.strictEqual(2048, metadata.width);
|
||||||
assert.strictEqual(1536, metadata.height);
|
assert.strictEqual(1536, metadata.height);
|
||||||
assert.strictEqual('srgb', metadata.space);
|
assert.strictEqual('srgb', metadata.space);
|
||||||
@ -146,6 +151,7 @@ describe('Image metadata', function () {
|
|||||||
sharp(fixtures.inputWebP).metadata(function (err, metadata) {
|
sharp(fixtures.inputWebP).metadata(function (err, metadata) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
assert.strictEqual('webp', metadata.format);
|
assert.strictEqual('webp', metadata.format);
|
||||||
|
assert.strictEqual('undefined', typeof metadata.size);
|
||||||
assert.strictEqual(1024, metadata.width);
|
assert.strictEqual(1024, metadata.width);
|
||||||
assert.strictEqual(772, metadata.height);
|
assert.strictEqual(772, metadata.height);
|
||||||
assert.strictEqual('srgb', metadata.space);
|
assert.strictEqual('srgb', metadata.space);
|
||||||
@ -167,6 +173,7 @@ describe('Image metadata', function () {
|
|||||||
sharp(fixtures.inputGif).metadata(function (err, metadata) {
|
sharp(fixtures.inputGif).metadata(function (err, metadata) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
assert.strictEqual('gif', metadata.format);
|
assert.strictEqual('gif', metadata.format);
|
||||||
|
assert.strictEqual('undefined', typeof metadata.size);
|
||||||
assert.strictEqual(800, metadata.width);
|
assert.strictEqual(800, metadata.width);
|
||||||
assert.strictEqual(533, metadata.height);
|
assert.strictEqual(533, metadata.height);
|
||||||
assert.strictEqual(3, metadata.channels);
|
assert.strictEqual(3, metadata.channels);
|
||||||
@ -186,6 +193,7 @@ describe('Image metadata', function () {
|
|||||||
sharp(fixtures.inputGifGreyPlusAlpha).metadata(function (err, metadata) {
|
sharp(fixtures.inputGifGreyPlusAlpha).metadata(function (err, metadata) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
assert.strictEqual('gif', metadata.format);
|
assert.strictEqual('gif', metadata.format);
|
||||||
|
assert.strictEqual('undefined', typeof metadata.size);
|
||||||
assert.strictEqual(2, metadata.width);
|
assert.strictEqual(2, metadata.width);
|
||||||
assert.strictEqual(1, metadata.height);
|
assert.strictEqual(1, metadata.height);
|
||||||
assert.strictEqual(2, metadata.channels);
|
assert.strictEqual(2, metadata.channels);
|
||||||
@ -205,6 +213,7 @@ describe('Image metadata', function () {
|
|||||||
it('File in, Promise out', function (done) {
|
it('File in, Promise out', function (done) {
|
||||||
sharp(fixtures.inputJpg).metadata().then(function (metadata) {
|
sharp(fixtures.inputJpg).metadata().then(function (metadata) {
|
||||||
assert.strictEqual('jpeg', metadata.format);
|
assert.strictEqual('jpeg', metadata.format);
|
||||||
|
assert.strictEqual('undefined', typeof metadata.size);
|
||||||
assert.strictEqual(2725, metadata.width);
|
assert.strictEqual(2725, metadata.width);
|
||||||
assert.strictEqual(2225, metadata.height);
|
assert.strictEqual(2225, metadata.height);
|
||||||
assert.strictEqual('srgb', metadata.space);
|
assert.strictEqual('srgb', metadata.space);
|
||||||
@ -236,6 +245,7 @@ describe('Image metadata', function () {
|
|||||||
const pipeline = sharp();
|
const pipeline = sharp();
|
||||||
pipeline.metadata().then(function (metadata) {
|
pipeline.metadata().then(function (metadata) {
|
||||||
assert.strictEqual('jpeg', metadata.format);
|
assert.strictEqual('jpeg', metadata.format);
|
||||||
|
assert.strictEqual(829183, metadata.size);
|
||||||
assert.strictEqual(2725, metadata.width);
|
assert.strictEqual(2725, metadata.width);
|
||||||
assert.strictEqual(2225, metadata.height);
|
assert.strictEqual(2225, metadata.height);
|
||||||
assert.strictEqual('srgb', metadata.space);
|
assert.strictEqual('srgb', metadata.space);
|
||||||
@ -250,9 +260,7 @@ describe('Image metadata', function () {
|
|||||||
assert.strictEqual('undefined', typeof metadata.exif);
|
assert.strictEqual('undefined', typeof metadata.exif);
|
||||||
assert.strictEqual('undefined', typeof metadata.icc);
|
assert.strictEqual('undefined', typeof metadata.icc);
|
||||||
done();
|
done();
|
||||||
}).catch(function (err) {
|
}).catch(done);
|
||||||
throw err;
|
|
||||||
});
|
|
||||||
readable.pipe(pipeline);
|
readable.pipe(pipeline);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -261,6 +269,7 @@ describe('Image metadata', function () {
|
|||||||
const pipeline = sharp().metadata(function (err, metadata) {
|
const pipeline = sharp().metadata(function (err, metadata) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
assert.strictEqual('jpeg', metadata.format);
|
assert.strictEqual('jpeg', metadata.format);
|
||||||
|
assert.strictEqual(829183, metadata.size);
|
||||||
assert.strictEqual(2725, metadata.width);
|
assert.strictEqual(2725, metadata.width);
|
||||||
assert.strictEqual(2225, metadata.height);
|
assert.strictEqual(2225, metadata.height);
|
||||||
assert.strictEqual('srgb', metadata.space);
|
assert.strictEqual('srgb', metadata.space);
|
||||||
@ -284,6 +293,7 @@ describe('Image metadata', function () {
|
|||||||
image.metadata(function (err, metadata) {
|
image.metadata(function (err, metadata) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
assert.strictEqual('jpeg', metadata.format);
|
assert.strictEqual('jpeg', metadata.format);
|
||||||
|
assert.strictEqual('undefined', typeof metadata.size);
|
||||||
assert.strictEqual(2725, metadata.width);
|
assert.strictEqual(2725, metadata.width);
|
||||||
assert.strictEqual(2225, metadata.height);
|
assert.strictEqual(2225, metadata.height);
|
||||||
assert.strictEqual('srgb', metadata.space);
|
assert.strictEqual('srgb', metadata.space);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user