Add support for repeated/tiled overlay image (#443)
USAGE: overlayWith('overlayimage.png', { tile: true, gravity: northwest} )
When using the tile option, the gravity option is applied to the extracted part of the tiled overlay image.
BIN
test/fixtures/expected/overlay-tile-gravity-center.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
test/fixtures/expected/overlay-tile-gravity-centre.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
test/fixtures/expected/overlay-tile-gravity-east.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
test/fixtures/expected/overlay-tile-gravity-north.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
test/fixtures/expected/overlay-tile-gravity-northeast.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
test/fixtures/expected/overlay-tile-gravity-northwest.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
test/fixtures/expected/overlay-tile-gravity-south.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
test/fixtures/expected/overlay-tile-gravity-southeast.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
test/fixtures/expected/overlay-tile-gravity-southwest.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
test/fixtures/expected/overlay-tile-gravity-west.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
test/fixtures/expected/overlay-tile-rotated90-gravity-northwest.jpg
vendored
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
test/fixtures/expected/overlay-tile-rotated90.jpg
vendored
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
@@ -242,4 +242,65 @@ describe('Overlays', function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe('Overlay with tile enabled and gravity', function() {
|
||||
Object.keys(sharp.gravity).forEach(function(gravity) {
|
||||
it(gravity, function(done) {
|
||||
var expected = fixtures.expected('overlay-tile-gravity-' + gravity + '.jpg');
|
||||
sharp(fixtures.inputJpg)
|
||||
.resize(80)
|
||||
.overlayWith(fixtures.inputPngWithTransparency16bit, {
|
||||
tile: true,
|
||||
gravity: gravity
|
||||
})
|
||||
.toBuffer(function(err, data, info) {
|
||||
if (err) throw err;
|
||||
assert.strictEqual('jpeg', info.format);
|
||||
assert.strictEqual(80, info.width);
|
||||
assert.strictEqual(65, info.height);
|
||||
assert.strictEqual(3, info.channels);
|
||||
fixtures.assertSimilar(expected, data, done);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
it('With tile enabled and image rotated 90 degrees', function(done) {
|
||||
var expected = fixtures.expected('overlay-tile-rotated90.jpg');
|
||||
sharp(fixtures.inputJpg)
|
||||
.rotate(90)
|
||||
.resize(80)
|
||||
.overlayWith(fixtures.inputPngWithTransparency16bit, {
|
||||
tile: true
|
||||
})
|
||||
.toBuffer(function(err, data, info) {
|
||||
if (err) throw err;
|
||||
assert.strictEqual('jpeg', info.format);
|
||||
assert.strictEqual(80, info.width);
|
||||
assert.strictEqual(98, info.height);
|
||||
assert.strictEqual(3, info.channels);
|
||||
fixtures.assertSimilar(expected, data, done);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
it('With tile enabled and image rotated 90 degrees and gravity northwest', function(done) {
|
||||
var expected = fixtures.expected('overlay-tile-rotated90-gravity-northwest.jpg');
|
||||
sharp(fixtures.inputJpg)
|
||||
.rotate(90)
|
||||
.resize(80)
|
||||
.overlayWith(fixtures.inputPngWithTransparency16bit, {
|
||||
tile: true,
|
||||
gravity: 'northwest'
|
||||
})
|
||||
.toBuffer(function(err, data, info) {
|
||||
if (err) throw err;
|
||||
assert.strictEqual('jpeg', info.format);
|
||||
assert.strictEqual(80, info.width);
|
||||
assert.strictEqual(98, info.height);
|
||||
assert.strictEqual(3, info.channels);
|
||||
fixtures.assertSimilar(expected, data, done);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||