mirror of
https://github.com/lovell/sharp.git
synced 2025-07-09 18:40:16 +02:00
Use v7.40.0+ libvips loader methods Separate Openslide as input vs Deep Zoom as output Split tile-based tests into new file Added assertions for generated tile size
205 lines
5.1 KiB
JavaScript
Executable File
205 lines
5.1 KiB
JavaScript
Executable File
'use strict';
|
|
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
var assert = require('assert');
|
|
|
|
var async = require('async');
|
|
var rimraf = require('rimraf');
|
|
|
|
var sharp = require('../../index');
|
|
var fixtures = require('../fixtures');
|
|
|
|
sharp.cache(0);
|
|
|
|
// Verifies all tiles in a given dz output directory are <= size
|
|
var assertDeepZoomTiles = function(directory, expectedSize, expectedLevels, done) {
|
|
// Get levels
|
|
var levels = fs.readdirSync(directory);
|
|
assert.strictEqual(expectedLevels, levels.length);
|
|
// Get tiles
|
|
var tiles = [];
|
|
levels.forEach(function(level) {
|
|
// Verify level directory name
|
|
assert.strictEqual(true, /^[0-9]+$/.test(level));
|
|
fs.readdirSync(path.join(directory, level)).forEach(function(tile) {
|
|
// Verify tile file name
|
|
assert.strictEqual(true, /^[0-9]+_[0-9]+\.jpeg$/.test(tile));
|
|
tiles.push(path.join(directory, level, tile));
|
|
});
|
|
});
|
|
// Verify each tile is <= expectedSize
|
|
async.eachSeries(tiles, function(tile, done) {
|
|
sharp(tile).metadata(function(err, metadata) {
|
|
if (err) {
|
|
done(err);
|
|
} else {
|
|
assert.strictEqual('jpeg', metadata.format);
|
|
assert.strictEqual('srgb', metadata.space);
|
|
assert.strictEqual(3, metadata.channels);
|
|
assert.strictEqual(false, metadata.hasProfile);
|
|
assert.strictEqual(false, metadata.hasAlpha);
|
|
assert.strictEqual(true, metadata.width <= expectedSize);
|
|
assert.strictEqual(true, metadata.height <= expectedSize);
|
|
done();
|
|
}
|
|
});
|
|
}, done);
|
|
};
|
|
|
|
describe('Tile', function() {
|
|
|
|
describe('Invalid tile values', function() {
|
|
it('size - NaN', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile('zoinks');
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
it('size - float', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile(1.1);
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
it('size - negative', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile(-1);
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
it('size - zero', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile(0);
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
it('size - too large', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile(8193);
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
it('overlap - NaN', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile(null, 'zoinks');
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
it('overlap - float', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile(null, 1.1);
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
it('overlap - negative', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile(null, -1);
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
it('overlap - too large', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile(null, 8193);
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
it('overlap - larger than default size', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile(null, 257);
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
it('overlap - larger than provided size', function(done) {
|
|
var isValid = true;
|
|
try {
|
|
sharp().tile(512, 513);
|
|
} catch (err) {
|
|
isValid = false;
|
|
}
|
|
assert.strictEqual(false, isValid);
|
|
done();
|
|
});
|
|
|
|
});
|
|
|
|
if (sharp.format.dz.output.file) {
|
|
describe('Deep Zoom output', function() {
|
|
|
|
it('Tile size - 256px default', function(done) {
|
|
var directory = fixtures.path('output256_files');
|
|
rimraf(directory, function() {
|
|
sharp(fixtures.inputJpg).toFile(fixtures.path('output256.dzi'), function(err, info) {
|
|
if (err) throw err;
|
|
assert.strictEqual('dz', info.format);
|
|
assertDeepZoomTiles(directory, 256, 13, done);
|
|
});
|
|
});
|
|
});
|
|
|
|
it('Tile size/overlap - 512/16px', function(done) {
|
|
var directory = fixtures.path('output512_files');
|
|
rimraf(directory, function() {
|
|
sharp(fixtures.inputJpg).tile(512, 16).toFile(fixtures.path('output512.dzi'), function(err, info) {
|
|
if (err) throw err;
|
|
assert.strictEqual('dz', info.format);
|
|
assertDeepZoomTiles(directory, 512 + 2 * 16, 13, done);
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|
|
}
|
|
|
|
});
|