From 755a0caf3d495b57529221504bece16930766b7e Mon Sep 17 00:00:00 2001 From: Lovell Fuller Date: Fri, 20 Dec 2019 17:19:33 +0000 Subject: [PATCH] Fix 16-bit, 2-channel PNG w/ ICC profile support #2013 --- docs/changelog.md | 5 +++++ src/pipeline.cc | 6 +++++- test/fixtures/16-bit-grey-alpha.png | Bin 0 -> 14195 bytes .../expected/16-bit-grey-alpha-identity.png | Bin 0 -> 4824 bytes test/fixtures/index.js | 1 + test/unit/png.js | 9 +++++++++ 6 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/16-bit-grey-alpha.png create mode 100644 test/fixtures/expected/16-bit-grey-alpha-identity.png diff --git a/docs/changelog.md b/docs/changelog.md index 920eb31a..99347473 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,11 @@ Requires libvips v8.8.1. +#### v0.23.5 - TBD + +* Ensure correct colour output for 16-bit, 2-channel PNG input with ICC profile. + [#2013](https://github.com/lovell/sharp/issues/2013) + #### v0.23.4 - 5th December 2019 * Handle zero-length Buffer objects when using Node.js v13.2.0+. diff --git a/src/pipeline.cc b/src/pipeline.cc index 83ba354d..d542688e 100644 --- a/src/pipeline.cc +++ b/src/pipeline.cc @@ -311,7 +311,11 @@ class PipelineWorker : public Nan::AsyncWorker { } // Ensure we're using a device-independent colour space - if (sharp::HasProfile(image) && image.interpretation() != VIPS_INTERPRETATION_LABS) { + if ( + sharp::HasProfile(image) && + image.interpretation() != VIPS_INTERPRETATION_LABS && + image.interpretation() != VIPS_INTERPRETATION_GREY16 + ) { // Convert to sRGB using embedded profile try { image = image.icc_transform("srgb", VImage::option() diff --git a/test/fixtures/16-bit-grey-alpha.png b/test/fixtures/16-bit-grey-alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..fab9f50367740ca4c25771a0575ec9939c9d0b8a GIT binary patch literal 14195 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 A6aWAK literal 0 HcmV?d00001 diff --git a/test/fixtures/expected/16-bit-grey-alpha-identity.png b/test/fixtures/expected/16-bit-grey-alpha-identity.png new file mode 100644 index 0000000000000000000000000000000000000000..766074b3dcbfbf884e957a5b080611037f01f6bd GIT binary patch literal 4824 zcmV;}5-076P)4pcl&dv_ubyVyME4p?!&paKX-+{<#&F6{?GRcJo|dSbp7+$^UwW)dpExCU4=dC z^?rUbzMmLew)gvsvd;?pwBWU~XD{z(;#JwR#TO>FvFmrz3p*@Q+rahtg_s@g{C>s` z8_*D!-**Jj)`fpt04dUi>uvAv?rgn@0hSZ&^^OV%=Y*c#&%0ob`)VH2Do_(rqD3(s z9$Ww*m2Kww88^*;Zb86TSX-M!*!kwH8uzT z1mrTY1vUmu1bSh==SY-9)a$)zNgr9d?jj=VZ!Vxb1##OHaab5&lOSOVTZae72duTh z?-Nr!A36dzcfKFuDbnF6@QZsaF32EKIMt{3I?!Nv1rUco_rCvNKPO>*5l$XpplIJ& z0}QY#qB2Qq;1szS)?sFf_M)=(Mp72UO7zM=ZPfvI2hNoMe=^-y0-V$ifkE%*Bgbppkrl%PIc;SK=A7|T%zu1O zBd28s zuQdSQ7cC+0IockkCzk|;BsXa zA?Q#+=UF0hVGeiYA`$O3C=wepLav2xY>~SX@yJ1IFe0WBgy7J>Nrn$5sfOsSA*}&y z_`b6cY{-Vew+in~nprIAvjQ)W;)-3MxXO^W8ph8{Si=^KdL%HKR&Wz8m!tsEMWZZ( z8ALC`A?HSi6z;M@e41fmz4wO!a0>D@0d=(Z&AARaZ3pqND*@i*=#d20V+B`2T08e0 zxnjTmUlpWZdwT*`H$zNI{^$x}ugySOX70xY-_F*3Mx@N5APqw)MTnwg_?*Y*hNeiJ z=*CmgZ$(-6F>yykyt=JL5@F+b(BDWIScP<40ha283NLJ1ZhvE%TUob7Jo}dxMm52ezd$+5*+K* zkPyE?nx@y25JvOFRf4RC1{)q+ukhW*0?01Xs(`f2IO7{8HwITX1!+~$aRfR61JF@~ zb%E+pT%Rl*m4r1ugdq5DV8J6h9BCzD_MQsTzHvnYxSl8)K!FJW8;PPP;D&3jR+jt> ztgn61f2@M_=sx=dd45a=dS?=smIGZuBvnTjK0(|xBWKlwjJzg#Fh$i3)8Bi}-RR5# zPW2uQe7+zywtQ(ZQRg)?PDqLqt@W2M%7Q-2GaPX`4(Y5> zl9}cCa?&CwrX~H>3~JBD&yqEo41}D5A;O6aGs`oEm?Y(<^%+<6yI_zc#=?=h4C$_c z0Id~!D+VGKW+W_z0fA!aC0LH#(PP#gHR62;@N3Lqn%0w9iHu~yysieqq&Qn~^u)v%;-U!uorD}%p?|B9tgwq$5@&6qO#tf(9-j)g6{RFWLZFtHY7EK81o1@o zdIyd?YcM3FtpXD7I?~ogGSeeNu@t$o-xQ#CffGdp51g0Dz23QaHNbNDmKheY z2Xvf=s49e#@`N+aqv|J^!~>pr3Vsp-cn2$whsZEO(&)4Dw+Z4g2iL9b^=>wx2&D{( zSh_pHW!HuWlpIKwTwwsplj8L>EW<`WtCY~F$>6eN#<5sTbOoCq6B&j`qyz6ka_L_r zwQ~g_t~!@%Uq6aVx&!2@DCL9n#s<_+1&oV)BdcvW)EAc)SZ9KN`{Xkh2cV4+=f*ht z5TZ3wWph&C%%$E(*GyJ)S~8sO7c6p9sC5Wd+sn`~o~ZQh6DTqRF*d`{@k->pP#^Cy zx{R8xNQoXGjzn^4`Cp_p0L~t;9utdd_cyRA3pc$2NJJ{T^vVO`ep*J^yOWY`irlO4 z?h^11N5Ij?U_~`_ret5NZ@7Fo*SxrLGaS7uV&A}sL1TuCfX+771(V*Z2f0LRr+-V; zHbpEiK{5NJ&uZT6WZ73G35!za5C{l^%U31!0G+By7|pW(5QQs!_LCu?ye>v5wZGD5 zM@a%_TlQoMd%La4-TD+BsWN@-OLlO(to9i-2I{VqUY4<&qc^*U4`ahn8&`q46* zgvj%^?g3&K(;o+z_NY@XQJEcI2AyM$v;*E%P{cR{zHgM@|yxN^`eP9bjCd{U94E8$KKU(0+$;c zhn2VzkSwI7U?yM-7UA%IhD+=&LY~iR16$~GP(Th4d!zXjSg89x3!B`&BnB!t#ZSdx z(VXxB;>&8ufUxW^@tIe zDaf8}l9ii);0(1TJH#G$L;p1vzmqDsnj*3b{Tx1H={TwBBSEmhGc@=x8(wubt8&76 zEh`3s=5%US4mqjySqD9X*z9DFipUem$RxxXGsG|Na+lUT`3R~VB7I0q)_jzMK3i{Q zkT$DaXN(lya>dB@np05ytWG}7t@Ms6_dtrs!tcpsG zW1hdf-iUQx0{XX5aClCkf6KX&VQO11?@VlHa{pS`pxA5;$w8h)S{B4(WB}>H^jLwU zuqXCTYC=$xTKHfK?3B0#!>`&a92V z#SHBxh)a#*X6I)0fLKfd=VT#0f`k^W6>UoPz$$r27I9+zg5+a(RB;$c+l5kw40R8? zQlsL9&en-yoGgfX%XyX7Jp>}_!Gfr0zd$u=a+X<3u+V%#jkftt_N+*)Mx{7LiB;XT zJ6zTR>)u(2%=%6=_ZO|Pyd4}bftTWhRg93Y;O8VE#8jM(4<+cl1h`Go+1#+H!aI3y zLt_?d71n(bDI%mWi)$0aA{rKz0rf%lK?GK~YAD8s z)LV{H0l5takY<4!ytOqS2bLH;uFw^fjJ_ICutK0N&Sy%3hjRFO@c| z3epy)@OLBOs`Wu%(VVV`Ln&)<81dWZgu8T`(-QO0Hzienkls+v9eL!kq{#3Ha1Ss5 zJfz(zEPV(%GJ>?`7-m+<-)*Gv$v9SX`IGFfkxfZQBqd6|f>j$$@mJE1vBKYfBNLsJ zx)85BXJ-i8lwfvq63On7BpTNs#hestMe^c2BcxH@cmPh@cYiOmE|e$M1xTA|0j&eO7#F zL@-G1(zz_^jg++iOEE{0>hZj_$dIzAGdWY2g8KIvaIU+f*X|xw8QJq-PIm?AfN7~p z`sCKXD&;|+=XF|fu_|y4>a@);b2EMRLEiz61#HdVNy0k5$z_Q?hp=siK3hSJtmHQ= zO2bS4udjJR(`slahM{pf!O)pO&DeyP9i%OWxsQQg6gQ8cv2lmQqZLp&Cg7W>XB1ll+!n9^`I{lbwxZE06q3`^d`s`1GN|R1MEeXd-su zNL$IDxW*sYfO>|L)Uzt3uxU;^yj$x;)w)HKQ-M{Lx|8H^VW#*<#G#0|RdBvjAaA*H zq>X@R%!==^8y2U?Y*$wHX6&Y`$VD2@0?#4JQ~ejp8X#Dl${lYhv8 zSN3K3H@_)1lFr{O6f5Vxb8(+DQtl>IIHStp5tYgq=kH04cuM?B$pvX%yyPDx<_E3x z-<_C?;6pJSzUb(bY z2xsxXU0J<`R-U&yDVD_E&u4)|#B_A_N~YLwYc9$D4*JZ7vb<9fJ1E`|K07pX6LMve z=tF&3$gTj+ldgsY4KlLZkrS_6FZ|9SZ^(T2+`_E!unS_M21KoP%9DgRtX%F&d7f5R*(R!`hNFih7iIZ{ zal_|}i59w)=Kjr*iAnKyqLWP}YVJnLD3RUsb`^PcBX8IgH)c$5ojVq35{4^Sj6b4O z+8q1-3oA+*6)5G`I>r0mq%Ka&UmF3l`xL6dw3*9jc4zuI$M_pbRg_fPNL@FFlWtJR zF39(4aBo#YU*4oRD^R>p>_GISIL}GR3`lEV6+@)|g3ChPHC>VKvoGs6DQ;#+*+TZD zZR;6>=Gu#9ba|Pu9=+>OELV|gPC(f51%#D=%)WEdhSz}_q2N33_14_Jgt#mucvHlJ znN^xILp{B&Pm2@p0-yg~lslz04@VMw199Iv0R0xiGX1Q^wMwh`wF@9rMjqZB1{{9RDiQOGa9NA(9Mc*^bMpX$M7o5-&>V*Pa%28ObeuXZsAHQ zOo?34p`I94+5}3i^s}j97}j1_tj#;(QHlX3!-Xiydb@x$Yjp0NOal_etuwzO+2vi} zGLE#xL8z7pjCAH`*Jk*H7Sc9G;CvsAml_Bo