From 54a71fc142cad4a632e8d001a97adc2980a6d0ab Mon Sep 17 00:00:00 2001 From: Lovell Fuller Date: Wed, 23 May 2018 20:51:47 +0100 Subject: [PATCH] Fix tint op by ensuring LAB and allowing negative values #1235 Add test cases for more tint colours and input interpretations --- docs/changelog.md | 6 ++++ lib/constructor.js | 4 +-- src/operations.cc | 9 +++--- src/pipeline.cc | 2 +- src/pipeline.h | 4 +-- test/fixtures/expected/tint-blue.jpg | Bin 0 -> 15025 bytes test/fixtures/expected/tint-cmyk.jpg | Bin 0 -> 26226 bytes test/fixtures/expected/tint-green.jpg | Bin 0 -> 12630 bytes test/unit/tint.js | 39 ++++++++++++++++++++++++++ 9 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 test/fixtures/expected/tint-blue.jpg create mode 100644 test/fixtures/expected/tint-cmyk.jpg create mode 100644 test/fixtures/expected/tint-green.jpg diff --git a/docs/changelog.md b/docs/changelog.md index daa1dd84..57bc81a5 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,12 @@ Requires libvips v8.6.1. +#### v0.20.3 - TBD + +* Fix tint operation by ensuring LAB interpretation and allowing negative values. + [#1235](https://github.com/lovell/sharp/issues/1235) + [@wezside](https://github.com/wezside) + #### v0.20.2 - 28th April 2018 * Add tint operation to set image chroma. diff --git a/lib/constructor.js b/lib/constructor.js index 2ec20f8c..7efa8605 100644 --- a/lib/constructor.js +++ b/lib/constructor.js @@ -152,8 +152,8 @@ const Sharp = function (input, options) { fastShrinkOnLoad: true, // operations background: [0, 0, 0, 255], - tintA: 0, - tintB: 0, + tintA: 128, + tintB: 128, flatten: false, negate: false, medianSize: 0, diff --git a/src/operations.cc b/src/operations.cc index da5f56d7..819bbbf0 100644 --- a/src/operations.cc +++ b/src/operations.cc @@ -161,13 +161,14 @@ namespace sharp { if (typeBeforeTint == VIPS_INTERPRETATION_RGB) { typeBeforeTint = VIPS_INTERPRETATION_sRGB; } - // Create 2 band image with every pixel set to the tint chroma - std::vector chromaPixel {a, b}; - VImage chroma = image.new_from_image(chromaPixel); // Extract luminance VImage luminance = image.colourspace(VIPS_INTERPRETATION_LAB)[0]; // Create the tinted version by combining the L from the original and the chroma from the tint - VImage tinted = luminance.bandjoin(chroma).colourspace(typeBeforeTint); + std::vector chroma {a, b}; + VImage tinted = luminance + .bandjoin(chroma) + .copy(VImage::option()->set("interpretation", VIPS_INTERPRETATION_LAB)) + .colourspace(typeBeforeTint); // Attach original alpha channel, if any if (HasAlpha(image)) { // Extract original alpha channel diff --git a/src/pipeline.cc b/src/pipeline.cc index abd5ab1d..b99de41f 100644 --- a/src/pipeline.cc +++ b/src/pipeline.cc @@ -683,7 +683,7 @@ class PipelineWorker : public Nan::AsyncWorker { } // Tint the image - if (baton->tintA > 0 || baton->tintB > 0) { + if (baton->tintA < 128.0 || baton->tintB < 128.0) { image = sharp::Tint(image, baton->tintA, baton->tintB); } diff --git a/src/pipeline.h b/src/pipeline.h index 0ae147dc..74e12706 100644 --- a/src/pipeline.h +++ b/src/pipeline.h @@ -157,8 +157,8 @@ struct PipelineBaton { cropOffsetLeft(0), cropOffsetTop(0), premultiplied(false), - tintA(0.0), - tintB(0.0), + tintA(128.0), + tintB(128.0), flatten(false), negate(false), blurSigma(0.0), diff --git a/test/fixtures/expected/tint-blue.jpg b/test/fixtures/expected/tint-blue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6b3a33e406d1b7b80519d4daca03265ee67e011 GIT binary patch literal 15025 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 az5x#by5M(;6n+7rtG5!iw=`8B%l`{%>&?0V literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/tint-cmyk.jpg b/test/fixtures/expected/tint-cmyk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..087099c2209972c259722e562f1764d7d7d651e0 GIT binary patch literal 26226 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/tint-green.jpg b/test/fixtures/expected/tint-green.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bff7df280666b610fcc850aa8474aad633dd4e1b GIT binary patch literal 12630 zcmb7pRZtvE(Cxy)BEfZG@x>tt4vV|H1&81)y0`@m1PHcRfZ*;H+&WI@Q%PH9dXK%ks+_Kn4IpLkFRwfk5aW3=9w^HUTy^78W)M9zG5M zISCj{PC`aTNzFt{34v0PkR(R*qGSF*x1CZ zlw_2w|7&~c0T5yW&QT7MlcJdBL* zf>FjJJoz621ORM*+=|r>*C#eET8qof8%3+jau{3Uh|H>i9H8#nPdzs& zVVu_NeMzU$(qC5^Gwc9(#G>fcm4y-Db5C!4Ewy15lONIO6ls;MFk=ctLU{%HvIpKu zq5#x*4|iox6hwKxsd?P;`Mr}Z`x^`41~*C>09#PSe!|WKEWK^amiu3 z^?=1^EFRF!Uh^y;IpIj&zPjUFt4W_d;rt$9X5T4$-4ClpznY~&98Q`B&n;4ZLk|>o z?@DsmzD%OE|00~*Fxi+iy@uZ^Q4vE-prVy(SH($wp>_wW9z1Dt7t2f$DB1no)KuD1 z?XP+*tkS+zG^pu-P@<3yNpATY0UgIq$O!%+e-pW$UL10wb&yLHhaHgqXD%V1IlnVM z`UMcf{_YIl)Np-Rh1;q=Z!go-s{TRyE+;Y`1f{bIrTEWEC46}{1K)KjSxchhetz6l zM8!K#BT=%@btPz?qF0DzwW@RcEpMK_A79xhL-A+3lh7MdJOVFk=O)_8^{11suvL#k z5$QWL59pcFHvY~euhMa_uo|iPqE4{yWrf6jkuZj9m!M+JEJvx_d>7v=oF*6k3tO{0 zb=EuU6U#HY!AcmH^hi)&goA5&yn~Hrhd9MJq%bveWRBR^N|ntAT1@dRugjngw{L%jD8)_E56`*8zYz-UYDq zg0Qu`(mt8FLrIdl{1qR6c=sI7@2N8COYzy0SVVwdOc9VBPw6*2GvLb?p=C|8jeS@i zbY{Voq|?#!{FW#uyUQVy@0hE+(^aEbE27qq{PX%ZVjR0C`HDy0bnJr~rOvJ_%f#-PjG}Iibcq6G*)sNlP}XVGJ{Rkd$2H$tWL%zC ztU!UlY7U?#-!8D{?}08WdvAhFW(#rBSGoFin~DmV4!t6CcDuTQwQj7)4m4D2pCmP7 zcI=fvsOPjT;mG_ah`#dsE~Ce{9^0mk){nc;b?wZeGj?ujXUj1>4C3HQrkeCH8)&h;bu;A$cFwfCG&HTnEx$PCJnGo0_MJZ^ zud#{*FRc8h$4s*`rB$d$#T<2*5?O>Q?tk$%bF0qTIQGOHot6t|Maw0xX5}U8FxPvI z0^yblrP+dun5$wNY!t+W+67T4HN_-69%$-zfPmSEX`^H9Uc!ucKv`-kkq5jf)E(om z!jWD)ED3WOq2K((<&XWkQ)WGofwK&AUn*jPm!o8&l%bdqsZ|7q6J`CfAlb8++N&DmVD=7qJyP{Sje5;_pm*V@qjW9G)XeF_PjYrH z#eI23JYAT4RSfno%ai&HGhPB4mm5huscGRQ1h@g;e|(+g6O6Xq(NXo@L_?-9sAvF} z#mEmbhfq^s&|cEsX;)P?`lTIe%D^{cOG+14#xq~OVW@u2_U~MIuJc(pkK~oVsWg7@ z^77Kgb34@6_Z6yGt*g&p86fR8bOx;JZlq!px0V+o3~MJwzojes&FsAZ)`K_Z4T9h# z|2^bBtVY5@sWLzt*8+mW`ITUnQAo_#=M)j4kq6zV5@9uCMDm4PGq}K6Qp?36F7HYLj4v9VNhC46yJ3WduhP?88ZgL=?BOB^( zGL~|W1EoO$Ud2@l21TSX#?@_#9HQUvO#7ywSru%{BJMOdL;*@wwzC6;)V+{O>}!>U z=Je#)!#vXL|F%l@zZWFS=Sa1HpLI`#H)_S_6f{<;?XCofC8$SrqL(!8KfOKDNI~Vn zlQYKuvi13(3R;@Q*Ne4R; zzilmDHRCS~fB1N&*WP{O#^gonGaB)=Kn5p1tGsB>N@V^O9+YZ?tFM&9HIWC`x`9-P z7Z;hh6>aXD!Lr)WsmFCs&EeqQ9=TGrN&boMAbVCE=lje`WJ+KU|8kL3Y%Sc&VKOSc zrnsgio0xQAVPURd7miktkN_tM_fI`gzCs1z&qk&6PeoJi#T_3IWEY-vH`;`Y1+(*c z_uwRH%ziY$MBP&KyD9f}2lz;&;`!>SOG&_00x_P>nq=O8jO^#^jFB6b7%OFr(bcmC z_uN-_3Jq~NyaHsTl_kF}l48E!muZ!FGTZzEx5cpfQv>AziHX_Mxu&;jWsN=4_ZGUV zeM1+k6!CBttK44rR8~DvAzXIagt=N&vBAKa(4j*L&%pSMfD{^yaIHlrw(RiAG<)b1 zT=-H1yV5)jV#FF5N*m_2nwt0E!K2rc6$n7bpZR;`yU zGBXR=(U)G86#Bb8Cghc(a4|ykL>u&D$gP;I_R@l>x-G zyF@C;g<4eREwRIILE2Pv0_k5xIfY$n<|)oGg!An^**2f2u85f$Mv8bMX`18)gJ_ks zGB?M5RL=hP4HN_ldnyL|1?Tz~cQp9Ys)o2;*6q!2aIor%6XyqBu}Eln)M zCGz-9`WKiDrTqGxO0T2v>9m&TFMMz(o9mAIXJ#T^8;Y3aO(KN7YO)z@!&U)6TMkq=a{2?WwT2cH4;0>y`+y0QU3e%li0>a^Ya8v+o^WPs7^BYBn)3BQ>+4>=v{by%qd~PRGeq zV!5iKtP+BqeT>@trP8pzTa@;Xo@d6pee(6Wh3t|zwPvQcs=UxHjYvs+;qs=exag1% zY6im+_gfFzw{I>SlY5lt_0Ecyc2()af^v}5kyrkxn8tygIiX!#g)xZ_yc zE#8q4bKb!hClPN|_7vHFRk3>^LF17;z!#j#pednT>|kjU(my`oT@pRh4Dv8yD=d~L z#W?2ulR26H};(i&4UR8WpgTt zIwjQ{41^wLc-8 z5@|x+k2hRa!k1Z4#I+~iC_JQ(10(LYi%ZkTQxcmt`p|ghbT6|nI_&@7U2Wtu+0hvO z+X=BsQA0G&&gHG})vi?USBZotVow6qH<45nHqfdIM`^^87%TUi;`?-~5_>ZDts@Bz zC%9^mA?BGLwA4Yni-Ne5@KNng%{h5n!IGYTY^hfGIr(BokGavCo3$k`iXZYgeXZr9 zJj*Hpl;~51F?cuS&r_$1u2C2jX6Wu+ala^y$&g)^ z>zA)W>xZtT_pQs&D3#8mq8Sfsq+qQhvao$mzRE0rqATv5RhP0Jnw@`DL{>}&u|Qt6 zl5oaX%ZymP0{1<(&h{m1{l*_6!lR}ir+l||eob1Y{{|PfcIXL~D&!&qT#Qh3F zUjyMyy`|jNeJu38tsEE85?w78w#48JPLxb^aVaJvOExK0Ln|9=oaHfE)Xohz*JMtL-xRQM})^ z>1~{zDrx-ioU39v<(R47znu%(1Qb6!w+0B<~3Ux z1jW_~vAc7SUi^qCYB7&%xawv0LI=;$(b)XGs?}NXFDRnlns!)To&Bi4P7&3JUPFMA zeH>Vb#&y8D$l72GlGXc(80TxCzy7P=VVL%{)=ozrcgR6<<168E{JgJ@&Q6&+-SQ3t zJwNpPUN!u`CgsS527E62Ni3jE9)HIvsbkBkPNxlQVW~Gzsx=sL0W1io&^A>9PZ!H% z@+NSV)8d`)ei+12-sXyE_`u#m3Qv~+r*;)8D7Rsyi+F#GFVK_Yj5;h9jN}>zdb|5qapagI7|Lrd-(Wf)A6Nep8e8 zS}8eAsB8-%fbadW9()2iXe006K$$!$Dp{nlD9TUiIHrUBt2#uof2INl_yHI6Cd}YO zdsamkPX)%S(R^Adjkn-Tjv<`3?N&R=mhv|UUj>aLy>;%#hudkN%3vo|YUrk1z>apd{cHEX3b%VE+bo^vV6aEnXs)zEdtGz1-w1BXI-v?Jets_T*evy?`-$9i3%AvQp`{C z=PTRrPX^&?iGYSI+7P?^UbLhyL`tr7`aRaM1i?n37wA>p1QXp%gL9bjB*2RsMJN z@nWp&O`2<7TN@u){V^&5-MEwG*2BKr7A*TPHEyN}_lY9nYLY|s{%&^Dg#I*aJ44bU zW_b(GQ~*s*XWJ64H(+h>>P`DF0LQn>CkG$Vzu!AXe2gxwLh^26h2;)mF1>M{gKnF{ zG@uChy|xq+s9Gm8^!q>5plhOx#RH_2Ni{8k)cla@mYc>!$j;K+I zb`AEMS1*8%Rd*7oIS0q5+vjx?7bs=1k9j$=Svc3V%z_6$K-Lox{YhOffTPN2aklo( zh{D$7A$iEBby_z#Ki>~4RJ>V!K2s|YB;n7WuP2btUxQxvoE9fp(ku_0VlGfMkXRaP zE~nDrciF#>=lCSgYu;@vwQgbOVp=&~)y+0sG3y$1@Z}%yR2JB}oM>2Ci%^rl`S)mmFI^lok$vk8q#I}>R$Xc+!Ou<{k zp2k8-)Hf^sy7#v>84lA^0rwi3`-o`E$ls-G6GS)EkNxX-X|gkz&Yi#NQ>@!r-%p~5 zHj^!6X^YMaz^8g?ri-+q_UqBWb(*(xCOq|>_cRpo0?>}1ort#8-X_-fIa|#Libgx7 z95dJ8J<+Dib~$q~LRU)F%8F!?`4EsiRyp{MjxuEQu~N?6nA5gmui4}|QE^Mg-|%U^;_}jk8qD@nW4KFOzN#7=*n=$i>Mo5 zdP(ZoVJMqr{8>N8Y~`Yktwmb-cB>5@iBW=t`Yq6`vtmy(6GWo9Ti9FgsL*%g5mQ7G z!qmUza4#^*>*9DHC4=qDM*HsExt+zK4(}iduiqC$QII>in#Dbp4AH!y-8BBk2J9O6 zZizGerF?5=_{8-Tbp9jN^*Saf=s;9f_g>ATGe(d(ewkv({>_@jAxRG`4w%l%i!wjM zWI1q{&A1E+v!|S-c(=$^1|tOPU>3hs;}o+mc0T| z4Q7Xws9RL2W{p_@ibY;?!69?emuKn<6Ba+pC+jwlpz9;Q(AADbr312=pr+T)8f8y# z{&X}KM3+h;I<}W{B_H{f+%Iv~2M&kQ=%NUm5TYp(q8_^(;TYW05>tBY}?9L4Wl26Gq?>QNcW@4qzg}M2qNj7urmOh#|_x{u4lHLm6>Eivz%K9TG zpR}7mDy)W`V6e)73Ym}ItifLF)u2s{P-sR*csC*|S+AH$zTbniXFLlfbD>g6PX?2@ zi;~hFT;+_r+ZLGB@}^PoAo-8f{#>yF2=UOk|ERQAdZxe*MOT&tL~s`Yy%g(C^7GA|MK+J=Zl~MY znR{pBs|bhlQDN_YhItDa#QPk}bC3@Sk#@x*tKOj(C#Fq&bP`#(mcS2uhblbC)T%R0 zg!=+u5BEC%G9X9}3P|5dlIBiJaW7`|KdGy01O(Mn^Dd|rFYW`LY`u^BI2^sbQ`ypJA6*Pi&h%YbmDzxm|NR+5r!fP2S@H1t%pz4gWeRzE=&0S zyW9>!$92S4ykuYAS_!K_cmO^?3<(*1&?VcuN#y*g^SB(Pg2%FdTq&MCcn8_2VaiwT0Ek5qr}ZMW-Zd}na-#x$5dDa`B=%fUY4fsLp~Sf zOrPYyoz2RF*r@pnS5DluH|9&>A=q^_{25G$fDZX8U~~{hO-$0yK!kdRg-hZXaYuu0 z{*5kocAzcI>C|)z{ybPOLkJ5XOy)x+PadhT<1PzrTl#!O@dtiCcf>>b==;QYnKQjP z#x^MMOy6DIoDP@(kN?fxDghVfriz+$>PNEM#7n}k<7I9u4XOPvZ_BhTh{M&O>Blh9 zXp&E-YV;ktVJ92urU5am%wXbEfQ)yIcJI}ZEN9msA9ACVX9YRLt?E559iw_|6zC9s zBDVvHx-rM`YugFUs^?Q$-vxbyy?fi1RX9INHiAh(;t(P?0$zSjS<^_t!S-6bqsg6$ z)QG{%>V{^L&H|{}axg45{SyuBzy%z!xE0y5Qa5$T9r+kJFHQ<|`I}==)F;bU60^X#8p$Pr$me2-ORkxGJBQYBc&9CkZ)cGaC6}MM-%!dhXLpz#`X?rXL;llU| zw0$3N-@7Pg#7vWASTXXs2xu$&cU>JT#^Zft@L!lk5{IE|8Ndz=)o0&WcM7!AS@IwCm8Eaa+;Grx#6r|n zvp=?;yd~Cf6GLb?GRZ#1J;1J-&el+9hc01k;6|t@jSEP?+a;E64e%xzhN;!(8ii&6 zG7dH=z9h#$Ni9O<_YvXAx=GAY-{zZd{4T-?2j{r~KTSWqv8`~yX1B-S)JVY{{rj$B zj!HKyz?7aLg;wbuuO&2R!3REMMomn%rY03cAsU@Fpfo}}G2czW=#5Zv<<0(-n8{y7 z5h#KLx1}ccw}Gf7Y;3`Jeig>c`by+F7Ra=oNfX5t#r$>P#Jv9OEDYSsZQOv2E z%wZKjM)p+Z?hmJUtXK=#l)@+Fl^cM5lfsfT6SvMD0$h_S4K-)*W%>EVM8--&;*OFP zn*>FNDMLR5L8l*%nWqy>Gk!aPH`h$0fvo3q$lIT+C^Nq%#IEu0t7ZvD$|}DGC>rrQ z30W=A9;B8_PG68Z3(tmn49_V2O@?s20BrCqBD`%LD1V+pQncY>QAJqH%ANL#hcN`h z`Jv#cA(>qjuM@rJ4_#*Hn{3ZZz4 zY$8v0vE+q2AK|l0X+XzwZg_l?PQ8Jv?N%8x{xK>Zf3;zgGuNA!d4GGX2HuCliJ{6V-&>KMXzODc^CO%*mk4rc%ZVwbYr-bVXI zmc%QO_SNK9W?WZOnG;Os*`kXNHN2i#Gq!whzOppGygUgA`?1T$NXR8dfl}c({ps{I z21!;a^k!FWym&0zm->2n#q8ByB_wQ3OlhXG1%vHq{R!eMrnAO6c$5e2omlUn4;qw*LjXs-V2PyQZn^+ed8U|TkChb#;; zk&KbZn;(^x!TYHoJUn&e6=q0y42HoE|lBDqoJN1d5c-A5Z{T%`? zfcDliEe3fP3l!CzK*_a9k|1IMkkW^SfVp>ZfL5-AKf%i1jW&xc)T}FdLdp_-w@`Jl zF~&7@5|6ZfBSzZ38UO&?G4X}3R`a|Jv(=p z2xWW;6@^(d6$R)pbQRtQLJx9suh{Li^mY=B;tfUC{i)m}G#snP2r|7bQKK^ei&(@P zp2(?GL2N1b$!b<|0_Mcn;;wW;*HDwG9o;k(S?DOPOGhuU%pP*uKhSYMLa^x7c%)3K_J&^yU2#X1|Akp_A%E*-vY}pUZj##D?G^^M8m$j{i~BK^H+}$&vj&B8Yda z-B^TFv{{M5{!=dkCG0MAipQtKvey(8NO(BqG(N3WZYHD=!3S5Y>#3d&g;Kan~ z+gBK9XAjP(LV>=cZxAz<38amRfn~hUZuZMmkDrfANw&x^ZmQek5jieYVE%!h$57Z1U*>V7{0a|o zM1712(k)|9AxcjC_pNyW9HbUqKHtLJ`N0k_ahlpDXmd(m68EG>te!BFFvvR1f_wa` zMoAt~X15Uv*{cnD$P^OEmQ8Sq3FD@#fh7t(fEvu?`s15&EV0kpPK{^;llw4bX4 zZ?ZqcNfckIy{3J1|GY!0mqVnE7yfra>HCt#MpZYxa7hBE_rFI$4_!fDLd&=jf1G&M z;nRLpG8GkoD?kU?3&uE-{t%BcNe1!B2+65CZx+_ZegFBD&q#zvFX04eA*6 zd$?4|e*rwUZB$kN28K{83)+&zRVFEBe5p}--N{3`4)bDN4c9-?4Yx@XMDh_rODDJg9pKY6R z4VB&JyeEUQVNQ>(JnZ%bi#vgs^hq+$a?D+z%}}=!cg1G(PZ!yS<$IXP$`u0`oL2r? z9g226_2j2s)BCk&qR(?72o_DXwm6MBHbZLL+{LM6*bgtsf3Y2p`g{0fj1u8q5;oG^K7Q7|N4o&uNiJbcJ`d{0` z;f}YFEH6OAE8))Po^f%Q1ib?aPnS3d&Xey=Jn+A^V;s8<;}_BcJpb+s7d6o2`!}hk z6;D%*B5AQR3qlpR#dXA%(~$>Xc1(2?@Q4R zj0tQZSNup!oaMrIRf%mtBU_iBa>-1o&O1=t;itc2@Mnc&55L&unPkTu0TFZnF~vp% z#zp^>d;i;4wS7a1B&zt{VL3p*aN9Ahu8Eb-jw#yK(%n(RsHw{gz$*|S$L=q|i8Dz{ zrrjwl`9o16+oqO@FvS1%O#e~gGlerXZkx%?f}vr?XApg~i1lo{auf|~d}JhWn86f_ znSKPC1CkuXwKQ!?qrUWz&)!Fu!T~&%p<9bMIuU0snCv*$AfoA%DB0r3RdWv@XD2EU zJ3s6j31(i+6^MEfB6az463PwT6M|jYb`D*?ynf=9-ZKl&sA;%euBL)=+8YC&1Onw$bDXH36p&nm#+15ZubAAM z(HzTa1JU8p{9+L*PnK-icGWEmk?TTk8xg8MWlO4_B^t9);l4(_Bbi=$Ce+Fzw|PoF zM5r0#-fB~D@VOEV|EQ%m_GA&tsZOCmU!JfSV(KVDvaeRNiv#@b z54&Csfk*xTZc3}72(y}#VEAV9s5mC!6M@UzS+(_LXJU- z$7}S3D3=YqVP7cpNMK zk|qZ-78S^4FB4j;rc}9(O*Be;_39-zD{%ZQ4QUmSVkJk2bpqAsep|LTPZsGFCY&`)wAQnO2OCzLLme>XG?jgE_e1`y+gQ%p6>^hC7xhH)|i-=9OHEA{xisikmUgxHqCA`+Fm09JYE@`uO^a^P^f` zH8N}5H63v2jux6%?df-HXnEo89k@Ksx8;b7 zk!xzDB0Dfft-FTs7-J1#eHh*$xab0A^X{1alVaQi#2(p3Y$nvzz)%)U%z`x2O}yaV z=4C97ch?O!)FAN?V#MvxIz8JUrN;u`j<7&xrjUq6VtZZOl47BPq=_164-_7}QzBB6 zqDKQCAN0?$v1R0*8Y=pnYJeOkD5WE#or+ww5F$`3#P%kZySq#%4<{WS>-r#AQcH}$ z$R?>D<{r_*@hJt|W!3Q@G?MNYxr>`5On!6gK63361b?I$V!A0M_F%~+YGGn=LNR3_ znFvj1s53#$v!Xr`yE`}^s%x9_b1!nt`z`H&(lRg4y$P;)WSv5YoXfx%?2C5@8)Zx? zNcJ3FwLg0T5l)KElC6-vNE~5QJoYd)psLF74*O}TQvZkY%L8{+#DEk8;F)?oXy6bw zj>}LpyT1%xQcr!=-2dN+>bV^jZ&d;RQE1YFGR-m7&$zHys!WHSD@SHMLo6``b9i0; zf6W9AUmq}eCT}7WZTgaUvv03iQu$5jgzVgceONH==P~aZl3opXjI%G76CzkMl+&QK z>3VTaFruMSGg(d=0pkH%IT*X*ns`bMV>h$RFMQK`f34YDX36?St5P1`Gm|NZGaz(9 zkzY0IH{GR2Ynb3S4i5aU>C0Mi-;?+yfr6Y4n=Tn8L@~y6Y!U;FgL4dtwx&=Gb6zD!_G$f7c zQ?aS^uCLsyxWm^QD(_SElo*}dc&Fj|87yGC3$1th(#WN16z92gY>yF-L54M|pK>-h zZqhkkPMrTK`^);68W@I1^LtV7*?kppjFK-zNwIq!pA8r3eX#mCQ#nUlEzG@5&j>f! z1q)5VZYK>wY@&1q3>7y=iI0H?H-GlkT6Gn?;;4X^iNg5%F8~rg$zdkt@|#2Lf`Fh5 zR+Qnd7((SDO5!xot+q5$6s8Qz5wt=lT;r9ox0bF0W(`B7=!Pw>Mnw+aQLz6>4Q$o! z#xSSRHSi?X@yTCFLk)8v#)kb{+ZKXGH&egpp`^Sd?wLh@xj4dv*dfgzb7iPvL%uow zL>_#a%YP2LQt%E+&4maz)%LNXeau$-Ff$bN9Xa;5M~Mef&(AWHBE&3{+{{m1!6RP? zOMu->i8-ud(cLe|4;+n>NTWnr6pbQH(zL7Ej*x96w!RDUX%@U$RKMBt_mh~dcEqb* c06&g`Y5q25wG9FG_4p1EtoAHkxi2gK2Q83;H2?qr literal 0 HcmV?d00001 diff --git a/test/unit/tint.js b/test/unit/tint.js index 7e18b920..582b501c 100644 --- a/test/unit/tint.js +++ b/test/unit/tint.js @@ -19,6 +19,32 @@ describe('Tint', function () { }); }); + it('tints rgb image green', function (done) { + const output = fixtures.path('output.tint-green.jpg'); + sharp(fixtures.inputJpg) + .resize(320, 240) + .tint('#00FF00') + .toFile(output, function (err, info) { + if (err) throw err; + assert.strictEqual(true, info.size > 0); + fixtures.assertMaxColourDistance(output, fixtures.expected('tint-green.jpg'), 10); + done(); + }); + }); + + it('tints rgb image blue', function (done) { + const output = fixtures.path('output.tint-blue.jpg'); + sharp(fixtures.inputJpg) + .resize(320, 240) + .tint('#0000FF') + .toFile(output, function (err, info) { + if (err) throw err; + assert.strictEqual(true, info.size > 0); + fixtures.assertMaxColourDistance(output, fixtures.expected('tint-blue.jpg'), 10); + done(); + }); + }); + it('tints rgb image with sepia tone', function (done) { const output = fixtures.path('output.tint-sepia.jpg'); sharp(fixtures.inputJpg) @@ -60,4 +86,17 @@ describe('Tint', function () { done(); }); }); + + it('tints cmyk image red', function (done) { + const output = fixtures.path('output.tint-cmyk.jpg'); + sharp(fixtures.inputJpgWithCmykProfile) + .resize(320, 240) + .tint('#FF0000') + .toFile(output, function (err, info) { + if (err) throw err; + assert.strictEqual(true, info.size > 0); + fixtures.assertMaxColourDistance(output, fixtures.expected('tint-cmyk.jpg'), 10); + done(); + }); + }); });