mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 10:30:15 +02:00
220 lines
7.4 KiB
JavaScript
Executable File
220 lines
7.4 KiB
JavaScript
Executable File
'use strict';
|
|
|
|
var fs = require('fs');
|
|
var assert = require('assert');
|
|
|
|
var sharp = require('../../index');
|
|
var fixtures = require('../fixtures');
|
|
|
|
sharp.cache(0);
|
|
|
|
describe('Image metadata', function() {
|
|
|
|
it('JPEG', function(done) {
|
|
sharp(fixtures.inputJpg).metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual('jpeg', metadata.format);
|
|
assert.strictEqual(2725, metadata.width);
|
|
assert.strictEqual(2225, metadata.height);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
assert.strictEqual(3, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
assert.strictEqual('undefined', typeof metadata.orientation);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('JPEG with EXIF', function(done) {
|
|
sharp(fixtures.inputJpgWithExif).metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual('jpeg', metadata.format);
|
|
assert.strictEqual(450, metadata.width);
|
|
assert.strictEqual(600, metadata.height);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
assert.strictEqual(3, metadata.channels);
|
|
assert.strictEqual(true, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
assert.strictEqual(8, metadata.orientation);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('TIFF', function(done) {
|
|
sharp(fixtures.inputTiff).metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual('tiff', metadata.format);
|
|
assert.strictEqual(2464, metadata.width);
|
|
assert.strictEqual(3248, metadata.height);
|
|
assert.strictEqual('b-w', metadata.space);
|
|
assert.strictEqual(1, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('PNG', function(done) {
|
|
sharp(fixtures.inputPng).metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual('png', metadata.format);
|
|
assert.strictEqual(2809, metadata.width);
|
|
assert.strictEqual(2074, metadata.height);
|
|
assert.strictEqual('b-w', metadata.space);
|
|
assert.strictEqual(1, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Transparent PNG', function(done) {
|
|
sharp(fixtures.inputPngWithTransparency).metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual('png', metadata.format);
|
|
assert.strictEqual(2048, metadata.width);
|
|
assert.strictEqual(1536, metadata.height);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
assert.strictEqual(4, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(true, metadata.hasAlpha);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('WebP', function(done) {
|
|
sharp(fixtures.inputWebP).metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual('webp', metadata.format);
|
|
assert.strictEqual(1024, metadata.width);
|
|
assert.strictEqual(772, metadata.height);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
assert.strictEqual(3, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('GIF via libmagick', function(done) {
|
|
sharp(fixtures.inputGif).metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual('magick', metadata.format);
|
|
assert.strictEqual(800, metadata.width);
|
|
assert.strictEqual(533, metadata.height);
|
|
assert.strictEqual(3, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('File in, Promise out', function(done) {
|
|
sharp(fixtures.inputJpg).metadata().then(function(metadata) {
|
|
assert.strictEqual('jpeg', metadata.format);
|
|
assert.strictEqual(2725, metadata.width);
|
|
assert.strictEqual(2225, metadata.height);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
assert.strictEqual(3, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Non-existent file in, Promise out', function(done) {
|
|
sharp('fail').metadata().then(function(metadata) {
|
|
throw new Error('Non-existent file');
|
|
}, function (err) {
|
|
assert.ok(!!err);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Stream in, Promise out', function(done) {
|
|
var readable = fs.createReadStream(fixtures.inputJpg);
|
|
var pipeline = sharp();
|
|
pipeline.metadata().then(function(metadata) {
|
|
assert.strictEqual('jpeg', metadata.format);
|
|
assert.strictEqual(2725, metadata.width);
|
|
assert.strictEqual(2225, metadata.height);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
assert.strictEqual(3, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
done();
|
|
}).catch(function(err) {
|
|
throw err;
|
|
});
|
|
readable.pipe(pipeline);
|
|
});
|
|
|
|
it('Stream', function(done) {
|
|
var readable = fs.createReadStream(fixtures.inputJpg);
|
|
var pipeline = sharp().metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual('jpeg', metadata.format);
|
|
assert.strictEqual(2725, metadata.width);
|
|
assert.strictEqual(2225, metadata.height);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
assert.strictEqual(3, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
done();
|
|
});
|
|
readable.pipe(pipeline);
|
|
});
|
|
|
|
it('Resize to half width using metadata', function(done) {
|
|
var image = sharp(fixtures.inputJpg);
|
|
image.metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual('jpeg', metadata.format);
|
|
assert.strictEqual(2725, metadata.width);
|
|
assert.strictEqual(2225, metadata.height);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
assert.strictEqual(3, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
image.resize(Math.floor(metadata.width / 2)).toBuffer(function(err, data, info) {
|
|
if (err) throw err;
|
|
assert.strictEqual(true, data.length > 0);
|
|
assert.strictEqual(1362, info.width);
|
|
assert.strictEqual(1112, info.height);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
it('Keep EXIF metadata after a resize', function(done) {
|
|
sharp(fixtures.inputJpgWithExif)
|
|
.resize(320, 240)
|
|
.withMetadata()
|
|
.toBuffer(function(err, buffer) {
|
|
if (err) throw err;
|
|
sharp(buffer).metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual(true, metadata.hasProfile);
|
|
assert.strictEqual(8, metadata.orientation);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
it('Remove EXIF metadata after a resize', function(done) {
|
|
sharp(fixtures.inputJpgWithExif)
|
|
.resize(320, 240)
|
|
.withMetadata(false)
|
|
.toBuffer(function(err, buffer) {
|
|
if (err) throw err;
|
|
sharp(buffer).metadata(function(err, metadata) {
|
|
if (err) throw err;
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual('undefined', typeof metadata.orientation);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|