Deprecate background, add op-specific prop to resize/extend/flatten #1392

This commit is contained in:
Lovell Fuller
2018-10-01 20:58:55 +01:00
parent 6007e13a22
commit a64844689e
17 changed files with 378 additions and 296 deletions

View File

@@ -19,9 +19,10 @@ describe('Alpha transparency', function () {
it('Flatten to RGB orange', function (done) {
sharp(fixtures.inputPngWithTransparency)
.flatten()
.background({r: 255, g: 102, b: 0})
.resize(400, 300)
.flatten({
background: { r: 255, g: 102, b: 0 }
})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(400, info.width);
@@ -32,9 +33,8 @@ describe('Alpha transparency', function () {
it('Flatten to CSS/hex orange', function (done) {
sharp(fixtures.inputPngWithTransparency)
.flatten()
.background('#ff6600')
.resize(400, 300)
.flatten({ background: '#ff6600' })
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(400, info.width);
@@ -46,8 +46,9 @@ describe('Alpha transparency', function () {
it('Flatten 16-bit PNG with transparency to orange', function (done) {
const output = fixtures.path('output.flatten-rgb16-orange.jpg');
sharp(fixtures.inputPngWithTransparency16bit)
.flatten()
.background({r: 255, g: 102, b: 0})
.flatten({
background: { r: 255, g: 102, b: 0 }
})
.toFile(output, function (err, info) {
if (err) throw err;
assert.strictEqual(true, info.size > 0);
@@ -71,8 +72,7 @@ describe('Alpha transparency', function () {
it('Ignored for JPEG', function (done) {
sharp(fixtures.inputJpg)
.background('#ff0000')
.flatten()
.flatten({ background: '#ff0000' })
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual('jpeg', info.format);

View File

@@ -69,8 +69,10 @@ describe('Colour space conversion', function () {
it('From CMYK to sRGB with white background, not yellow', function (done) {
sharp(fixtures.inputJpgWithCmykProfile)
.resize(320, 240, { fit: sharp.fit.contain })
.background('white')
.resize(320, 240, {
fit: sharp.fit.contain,
background: 'white'
})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual('jpeg', info.format);

View File

@@ -0,0 +1,73 @@
'use strict';
const assert = require('assert');
const fixtures = require('../fixtures');
const sharp = require('../../');
describe('Deprecated background', function () {
it('Flatten to RGB orange', function (done) {
sharp(fixtures.inputPngWithTransparency)
.flatten()
.background({r: 255, g: 102, b: 0})
.resize(400, 300)
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(400, info.width);
assert.strictEqual(300, info.height);
fixtures.assertSimilar(fixtures.expected('flatten-orange.jpg'), data, done);
});
});
it('Flatten to CSS/hex orange', function (done) {
sharp(fixtures.inputPngWithTransparency)
.flatten()
.background('#ff6600')
.resize(400, 300)
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(400, info.width);
assert.strictEqual(300, info.height);
fixtures.assertSimilar(fixtures.expected('flatten-orange.jpg'), data, done);
});
});
it('Flatten 16-bit PNG with transparency to orange', function (done) {
const output = fixtures.path('output.flatten-rgb16-orange.jpg');
sharp(fixtures.inputPngWithTransparency16bit)
.flatten()
.background({r: 255, g: 102, b: 0})
.toFile(output, function (err, info) {
if (err) throw err;
assert.strictEqual(true, info.size > 0);
assert.strictEqual(32, info.width);
assert.strictEqual(32, info.height);
fixtures.assertMaxColourDistance(output, fixtures.expected('flatten-rgb16-orange.jpg'), 25);
done();
});
});
it('Ignored for JPEG', function (done) {
sharp(fixtures.inputJpg)
.background('#ff0000')
.flatten()
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual('jpeg', info.format);
assert.strictEqual(3, info.channels);
done();
});
});
it('extend all sides equally with RGB', function (done) {
sharp(fixtures.inputJpg)
.resize(120)
.background({r: 255, g: 0, b: 0})
.extend(10)
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(140, info.width);
assert.strictEqual(118, info.height);
fixtures.assertSimilar(fixtures.expected('extend-equal.jpg'), data, done);
});
});
});

View File

@@ -9,8 +9,13 @@ describe('Extend', function () {
it('extend all sides equally with RGB', function (done) {
sharp(fixtures.inputJpg)
.resize(120)
.background({r: 255, g: 0, b: 0})
.extend(10)
.extend({
top: 10,
bottom: 10,
left: 10,
right: 10,
background: { r: 255, g: 0, b: 0 }
})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(140, info.width);
@@ -22,8 +27,13 @@ describe('Extend', function () {
it('extend sides unequally with RGBA', function (done) {
sharp(fixtures.inputPngWithTransparency16bit)
.resize(120)
.background({r: 0, g: 0, b: 0, alpha: 0})
.extend({top: 50, bottom: 0, left: 10, right: 35})
.extend({
top: 50,
bottom: 0,
left: 10,
right: 35,
background: { r: 0, g: 0, b: 0, alpha: 0 }
})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(165, info.width);
@@ -50,9 +60,14 @@ describe('Extend', function () {
it('should add alpha channel before extending with a transparent Background', function (done) {
sharp(fixtures.inputJpgWithLandscapeExif1)
.background({r: 0, g: 0, b: 0, alpha: 0})
.extend({
top: 0,
bottom: 10,
left: 0,
right: 10,
background: { r: 0, g: 0, b: 0, alpha: 0 }
})
.toFormat(sharp.format.png)
.extend({top: 0, bottom: 10, left: 0, right: 10})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(610, info.width);
@@ -63,8 +78,13 @@ describe('Extend', function () {
it('PNG with 2 channels', function (done) {
sharp(fixtures.inputPngWithGreyAlpha)
.background('transparent')
.extend({top: 0, bottom: 20, left: 0, right: 20})
.extend({
top: 0,
bottom: 20,
left: 0,
right: 20,
background: 'transparent'
})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);

View File

@@ -38,8 +38,10 @@ describe('Resize fit=contain', function () {
it('JPEG within WebP, to include alpha channel', function (done) {
sharp(fixtures.inputJpg)
.resize(320, 240, { fit: 'contain' })
.background({r: 0, g: 0, b: 0, alpha: 0})
.resize(320, 240, {
fit: 'contain',
background: { r: 0, g: 0, b: 0, alpha: 0 }
})
.webp()
.toBuffer(function (err, data, info) {
if (err) throw err;
@@ -82,8 +84,10 @@ describe('Resize fit=contain', function () {
it('16-bit PNG with alpha channel onto RGBA', function (done) {
sharp(fixtures.inputPngWithTransparency16bit)
.resize(32, 16, { fit: 'contain' })
.background({r: 0, g: 0, b: 0, alpha: 0})
.resize(32, 16, {
fit: 'contain',
background: { r: 0, g: 0, b: 0, alpha: 0 }
})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -97,8 +101,10 @@ describe('Resize fit=contain', function () {
it('PNG with 2 channels', function (done) {
sharp(fixtures.inputPngWithGreyAlpha)
.resize(32, 16, { fit: 'contain' })
.background({r: 0, g: 0, b: 0, alpha: 0})
.resize(32, 16, {
fit: 'contain',
background: { r: 0, g: 0, b: 0, alpha: 0 }
})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -112,8 +118,10 @@ describe('Resize fit=contain', function () {
it.skip('TIFF in LAB colourspace onto RGBA background', function (done) {
sharp(fixtures.inputTiffCielab)
.resize(64, 128, { fit: 'contain' })
.background({r: 255, g: 102, b: 0, alpha: 0.5})
.resize(64, 128, {
fit: 'contain',
background: { r: 255, g: 102, b: 0, alpha: 0.5 }
})
.png()
.toBuffer(function (err, data, info) {
if (err) throw err;
@@ -152,9 +160,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'top'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -170,9 +178,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'right top'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -188,9 +196,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'right'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -206,9 +214,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'right bottom'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -224,9 +232,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'bottom'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -242,9 +250,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'left bottom'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -260,9 +268,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'left'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -278,9 +286,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'left top'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -296,9 +304,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.north
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -314,9 +322,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.northeast
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -332,9 +340,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.east
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -350,9 +358,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.southeast
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -368,9 +376,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.south
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -386,9 +394,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.southwest
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -404,9 +412,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.west
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -422,9 +430,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.northwest
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -440,9 +448,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 100, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.center
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -458,9 +466,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'top'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -476,9 +484,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'right top'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -494,9 +502,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'right'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -512,9 +520,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'right bottom'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -530,9 +538,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'bottom'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -548,9 +556,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'left bottom'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -566,9 +574,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'left'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -584,9 +592,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: 'left top'
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -602,9 +610,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.north
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -620,9 +628,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.northeast
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -638,9 +646,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.east
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -656,9 +664,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.southeast
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -674,9 +682,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.south
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -692,9 +700,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.southwest
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -710,9 +718,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.west
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -728,9 +736,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.northwest
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);
@@ -746,9 +754,9 @@ describe('Resize fit=contain', function () {
sharp(fixtures.inputPngEmbed)
.resize(200, 200, {
fit: sharp.fit.contain,
background: { r: 0, g: 0, b: 0, alpha: 0 },
position: sharp.gravity.center
})
.background({r: 0, g: 0, b: 0, alpha: 0})
.toBuffer(function (err, data, info) {
if (err) throw err;
assert.strictEqual(true, data.length > 0);