From 6ccccf8c398d0401eb8a0e0379839949fb827603 Mon Sep 17 00:00:00 2001 From: Patrick Paskaris Date: Mon, 14 Nov 2016 17:09:43 -0500 Subject: [PATCH] Allow use of extend with greyscale input (#623) --- src/pipeline.cc | 20 +++++++++++++++----- test/fixtures/expected/extend-2channel.png | Bin 0 -> 32307 bytes test/unit/extend.js | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 test/fixtures/expected/extend-2channel.png diff --git a/src/pipeline.cc b/src/pipeline.cc index 7bd7eb50..83fee51b 100644 --- a/src/pipeline.cc +++ b/src/pipeline.cc @@ -521,11 +521,21 @@ class PipelineWorker : public Nan::AsyncWorker { // Scale up 8-bit values to match 16-bit input image double const multiplier = sharp::Is16Bit(image.interpretation()) ? 256.0 : 1.0; // Create background colour - std::vector background { - baton->background[0] * multiplier, - baton->background[1] * multiplier, - baton->background[2] * multiplier - }; + std::vector background; + if (image.bands() > 2) { + background = { + multiplier * baton->background[0], + multiplier * baton->background[1], + multiplier * baton->background[2] + }; + } else { + // Convert sRGB to greyscale + background = { multiplier * ( + 0.2126 * baton->background[0] + + 0.7152 * baton->background[1] + + 0.0722 * baton->background[2] + )}; + } // Add alpha channel to background colour if (baton->background[3] < 255.0 || HasAlpha(image)) { background.push_back(baton->background[3] * multiplier); diff --git a/test/fixtures/expected/extend-2channel.png b/test/fixtures/expected/extend-2channel.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd4cad4ebfdb9451c3331799c1f6480d1e1a93c GIT binary patch literal 32307 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 WrPA^00a z91iE8YoxIil!=G{;PtE5z`;bMZ+{_K2h=(M7!k)`93l?6E8540{W zFL+^b)e`^=-wI?3+OL6_TB}yKuz)5DyD>}k1UO8;4k)!76@8}$8_4|tT+}5vV(kg2 zZM@Q_Cr00piPNP_|M5T%Eh1tx%@LW)xx>(XrqE^W6!qc%A`9jBb#nqH!-&Y>`g>@% zWAY?QK?+_0u>DTB^p-fJu>lq`e~aFeuLFGoJq{*4U9PE8HXh>R4kWCS>kdlbfm^&M zcThpM-Ev7B`DsAAm9mPh=iA1yZ;@oSfw(=`UQ^>rkX|WBv9n9etBw1;;%pXASFiyG z|7%?bG|?}tGCsS!&;C2Gf~$rs-WAhG)WA1e(%w-m?;S>ot+JaLf)d<+pdNBIxSP&s zrp@Y}m#uG8cPJPEy#^rmwrj6AeO2@T=py-o%*#*tSesZaWN?~8 zJT}Vaqy7@#loZv~xI+EoYEah^e7@Cq{SS!S1Z8T?LAJ#ZO4TxXj#R{4^CMxa0}h-8 z4HM@6P7o`rrNyO0Y3J7fA;g5ri`n$}UAE0*&LZDl7k|g9##mi1_ZHeWPS|2D1>6=m zg+!ojSG&{x539YMy)t0K-N;SSxgS!i3buh+XaQn=_8OP@JZl7u-7z3Bvh_}dLtpg; z|F7XGDsq8Kdgi2NyCKpXY1oex;@~a8si;7}P1(`O6#t6`)eeDAeOxVnMakxwuz|U+ zyiu`h5n0AQ4n>t5=ZPdaTqXJ|X-{3rN z2&l64nFGxQ%vvuPJCgS(kIgV~Sp212IsixWk{V@^~rU#ceNUB8b z5;M+0qQeg*+$8VatiY!lPE7c3j`4w|!T}H={6YN+9CUl{c;jgbD-VXS9tdyv|3aU* z@RiHnVmIcq_;2>U?}w@i|MzCIcw^bBDo!|UKP19RicW-llvq`mdO6gGRkQcN zr-aV$^gX8D?Htl}IBqhCyCNTf8aSt-#bfV?Y!3oI!vB4kE@GEJtRfc~gRtrKIJjWN zK>X$*;5>e*{}t6hJj}3GEjPUGeRl^)>VPUoSx_Hx?Rt4QaorBasBm{`GK3{=S8Fl9! z{H{Yos0~9teTOjFX{R!Sr^ugA4hEfkBNJ&=&dy>()6P=v5dWbfrq}qI6S6)4${#f4 z_j@@kA)JvwE~x!EVDZ?Gmg)0QO+t*fy@OcfSKALPTV{y$$>8!J z!QFvc&4g|DtsP94JvL_X!ru8a{J)=nwVf{kENeQDlkr>YqS2M%TsR71h}jpWK(TaD zMF#`}1w9bfdMRR?OXMjy$2~wYmW|_bmc4z})3;Um4Q_kkN^s&W&Zj1VT0w~6kam$7504+Wa-0;l z!7@hLfLj}sCyOn8uu8lu4kXROS0dX51wgQ1VgM+?VZrzIH^2-M$3)>CD==?DP8O-O z0JM_)tN=_K@jaSC-h3Jx(V?d`eOnahj}l_CGBZ!sDwm$)H5wo*y=p&#$mJqW?Xxo0Z9PYc7?Y+=jh-`EVefGZJcwA zHzA=19{WvdJ?FRXk~&+YdfZemsq}@mVqz)vXUp^p$(un=al5RlYG)24nvQzpulBAl zfWGP{wQiGY>2l64X?*bIM>*rK${$aScNt!Am(5at&i8^9dG#CV zc4EbF`(&G#OLwb?%KXVa%3VHoV>Y~5Jg51Gy4kLGoIldGDS7J}$*|>pq7qCF*^c^f z;+|YY)yv5?PXioO1@8!nDgsx+|BrvAabB^0Dt2^Z{Q6A}2&i*=s2Y1%zw)q=vU0Nl zf87v!ASx*&Dk>!U;DzX8sRt5L5|TpT&j%02pA_MQ+5i7P;N)U$|Hk+K{Rc{|nL@x1 P+|X3jQK?k24EuioBq6F0 literal 0 HcmV?d00001 diff --git a/test/unit/extend.js b/test/unit/extend.js index 13686c49..c618295f 100644 --- a/test/unit/extend.js +++ b/test/unit/extend.js @@ -60,4 +60,19 @@ describe('Extend', function () { fixtures.assertSimilar(fixtures.expected('addAlphaChanelBeforeExtend.png'), data, done); }); }); + + it('PNG with 2 channels', function (done) { + sharp(fixtures.inputPngWithGreyAlpha) + .background('transparent') + .extend({top: 0, bottom: 20, left: 0, right: 20}) + .toBuffer(function (err, data, info) { + if (err) throw err; + assert.strictEqual(true, data.length > 0); + assert.strictEqual('png', info.format); + assert.strictEqual(420, info.width); + assert.strictEqual(320, info.height); + assert.strictEqual(4, info.channels); + fixtures.assertSimilar(fixtures.expected('extend-2channel.png'), data, done); + }); + }); });