From fb3c5f844030671cb8a79759f2d093504935a39f Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Fri, 5 Jan 2018 12:49:54 +0100 Subject: [PATCH] Added test case for RGB JPEG + fixed an issue in getImageTypes to avoid incompatible conversion. --- .../imageio/util/ImageReaderAbstractTest.java | 5 ++-- .../imageio/plugins/jpeg/JPEGImageReader.java | 14 +++++++++++ .../plugins/jpeg/JPEGImageReaderTest.java | 23 ++++++++++++++++++ .../resources/jpeg/adobe-unknown-rgb-ids.jpg | Bin 0 -> 9231 bytes 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 imageio/imageio-jpeg/src/test/resources/jpeg/adobe-unknown-rgb-ids.jpg diff --git a/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTest.java b/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTest.java index ea61f61a..d83c21d6 100644 --- a/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTest.java +++ b/imageio/imageio-core/src/test/java/com/twelvemonkeys/imageio/util/ImageReaderAbstractTest.java @@ -1428,8 +1428,9 @@ public abstract class ImageReaderAbstractTest { catch (IIOException | IllegalArgumentException expected) { // TODO: This is thrown by ImageReader.getDestination. But are we happy with that? String message = expected.getMessage().toLowerCase(); - if (!(message.contains("destination") && message.contains("type"))) { - // Allow this to bubble up, du to a bug in the Sun PNGImageReader + if (!(message.contains("destination") && message.contains("type") + || message.contains("num source & dest bands differ"))) { + // Allow this to bubble up, due to a bug in the Sun PNGImageReader throw expected; } } diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java index 898caed8..d26cdd2a 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java @@ -274,6 +274,20 @@ public final class JPEGImageReader extends ImageReaderBase { return typeList.iterator(); } + else if (csType == JPEGColorSpace.RGB) { + // Bug in com.sun...JPEGImageReader: returns gray as acceptable type, but refuses to convert + ArrayList typeList = new ArrayList<>(); + + // Filter out the gray type + while (types.hasNext()) { + ImageTypeSpecifier type = types.next(); + if (type.getBufferedImageType() != BufferedImage.TYPE_BYTE_GRAY) { + typeList.add(type); + } + } + + return typeList.iterator(); + } return types; } diff --git a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java index e6cc6933..361890ce 100644 --- a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java +++ b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java @@ -88,6 +88,7 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTestj3zvxue-zz#RBrT#N&9042p` z%F7g#l$R+%AWEt$SFc>5roM6mOiz22=>{`1(+x&ORtPsID;t!Zk@42UThP1rcpmVu zaPmFoyZ@N`KF|G&dVqlnNCIZbH5mX!2H+V3aM28~17rZ%Wiqn=?DKyEB{{`q5Y;8J zzpTPlfQ*8S{1Q1O1vv#J^=061^d)i%hRfG(Qwo5tKfQ5B!xR|+6^u-$y4mndv$&T_ zNX|KGlaWbS#LNX-vL*UD@cZ1w7(h#|2`B>3000IMV+MJDXfXW$gPOduv7|1yzkhDW zal8;NDCgeAi*QiSR$j-fjTdSPaOcehyblgh+We#5#H|_SkzwK*h0VW5*6l?8pivF8 z(%O2>_E?U36@n5-y#U_YoVhERk{x3xqsK*=g-(8`)xFFF=?7%)Q!1c|Kja6-Zj5Z> zFak&72lg%gKlZy2FZ|~Rtfl%VlS7URUsmc7_^{NFVh%>#tFvF6>2r06wF=0{)WG9V z;+=oRqxY6Hgst+F_M~P&DCt^dhf#)Q^98`@CYv&_-a(m|y&)iY>2cq%@HLl-r1Op! zHaITQGz0(gaZH|B|1u~(BZQqXHc-twN_{oWomib$mHnG0S|Y|KL{jv31Qj1eQiO8P zYDw2QhwvRSf6)PV`U6;-1t_RW$(=QPiwL`S#Jj)CM@iQ>Sl9dQ0=QB>@Qb`R&l^ccJS3dY9NKRdd%kq(Hq3VVZ!ODcywP(DHWE#_sz5Z8rebg1+d^sNi|Pv zjw#C#@AiaUMicEKk_S%wM>8(~YIs83*`WIcz1T`Ls?SJr>Kt ziJ6;^v5=qD<1T=JTi}#mzApn(4=;rtS`C#eVFQ(SC|%B%4YKTTkDmW4FJ}z& zPL)fCeiB=X`A;{#!46dV&#xx!^=Oe#Ph9|$4?urHWE3$$)BG2}g!8h$cEycVzgJja zjSHYZA>04N8rGK-efnl(-3$#1lazh`7c&WkXc z>)C%21J^9ofF#;cOIX!d&#-VTy|>o)X-qIZG22orZGzk@7banFZVMVrHtuhFGBD?W z%aOGlj?52_#&z@ai8Eg|6IsvulhNlWcJv!0-MAlIjH-yzcM|92^v^9t4JFZOhGx<_ zjg2M{l29|b_cnhm;`_()uZfHLThnh(HkGY0i*G~_d1fAN!JZGqkFu^jpNU;cu2uj` z5vrOFO{JYz;>bDJ7uyA8o{S0LNymKCU&;~^0_ku6dve~eYz}qqTMjq#+Hm2vcMq&^QZn9o6Kc5c<5$~YpUQvpa)I7h~vwyepm}0T4zPQg+fR}i_l2{LPmHz zX7_{v*MqgV*TD-pQjlfY*g7eYm2?Z;W3i9TVay6v?sPyg|Ct);AsraLa;s4udK)`9 zPN{q+)}m$j1VgtLc5rw$q|*J#Ks~swqVWRYiBeb+7OR-|Yj4UM&0P`Ojg@=5v6H7L zJ};a+9nVXr^`>s^hMwZ9qG46ND3RX{IsEJN%e7qwN@d5Jg5g$k=GCFUT58TJ_YMo; zYw}*d^>?&m%aYj>=Oc?ll*dyIZ!TI81%;p4$MaItbacI2@pd6*aj=YKXf+?l2#-BW zviKF|N#7O+b?Q0gwe`4+vF;&_?4DgoBn@0u!M8yVWVOPZ+)sIt{#oy#LTT3ERdz19qu8(RQVJ>w6R96!2?OuK+ZCMTBq{HQLM`A-1Mh-Zd z_*u@1OJ54ehGMFspO@H$&k6Bv*5heueWXx^L7KJ+oEj6EL$w_&dUG(5B?mn1C81qI z?QDUuV4Opd)#?2=Es~0B)`$>fOhN>l_z3f6Fhnata_(MhJv#win69(GXC=aiP!cuf zV}z%*8betjQ8E%TpR+JYnI&`@mn+<5Um)fb=N8>tG{<*XG z$`@?s1)yjxrR3Qlac?&Az)1dj!alC+c70eNlT9F#trWBL{(8;(J!6H(3`_(6bSiR5 zP9N2nLY9D_Fn8nst?AojZ9Ro=bEORjXR8OiEIuuXV0A74)ubpqE z=fJBAAkE6YsD)8#%yKe1;_)9~K8cC5*NSs4@rRzAQci}TRa43ZAn044bcxEU{y(HV zP67X_>+Ndnz{C7|qM05p?=6egg2RrTJ=Ss8@9Wynmhlu6t*jN1)cuyICOp__g)RH* zAj87T&LasYY2Vu{T}YSgB#xY{rJX2Qg;v^*ayt|9;ggFkn}^dK<`WX^$dhx@ZL@s1 zmwv}(nCQg&GM-I(r^k$b6LWRyqglB+J8tAW<}Q)Z<>ZhHU@3-uaQT_YBf$*azx8Fd zPsf@nOvn;K1}#572r6 zJl$ql_rBbvjq_FE$Sx@``nI>nDbf>(Y4Ctd4AHl%38ACrX?lkCHm>JSl^{kPnvI3V z=EN$X+Ea)o}FXhZ6^>rI^-9;K3XeyZ}HXsqIFoXyN-|j?OGqxw4-nJ?9Q_6F>HYa z>EB6e`443)KkFzw_g@1X+?N0(X{9}AGJVyn*#lb9^4h$W#qQ-Xt=9m=r$gP7s~#^qcOuwJYt*l$-AM!>q~Dd~jPm z!2s7KiR6mszy^L{f+)s*tv0ljvvd$pIvGPBDTRI z9^L&3Lx)@#=d6-zg~H-yw5zKeHG`hSX*!wj&RQljGjork@F3}($kYzvm5x!IqukI# zH;&Z&!D8Zc@NuV$+})rZk$6tP1I8`8a%Q&p$$7m}2maGE#%Lj7wu?3vyk-e00+Su_ zECn06|JZfQu<*X~+aqb@O+%@`)~1}t+B*-~cmtgb$sT3m=Z4)yhS3&dxS^Nh%g3F*-Av(V+Tk2<%2Iir z2`v0muHF#)t(N1jvRi@~M*HS1+FLmbvL1jS_+?i0w1^VCObFzi;mZNm^YWpp7dUqMld2TZ3SI4esfwVYdeYAU1=y_!Uy!dW$(uD?az!2W-p6ynTlNBtijAk3)u(f z=f$KUVwL-Z-OGY$7Z=pTr=wn=>-lYW*pHm>&ka30iL75*OY^>TB&q)@KB8( zC$YQ=kT3h5A37I8Qk4HHZ-W&^!}G!qCB;-fu@P1b6|oFOGu!GHzyt1qt#4J|=`FG@ z+icmPFq6$$$JDISc7S-&MfSV-08Fo!>!EEExyt&C7qc>a*yiGbRsTKWQWyPGk1 zsrGxj-)mu#yb<9B0et$x5(%m^J;4NI?y=<>qLQV|Fe=Pbpkf6MpU(fI^4YHuqiwlM zo-UTk)Cd16qK&Maa9`zWKUsh7-VQ5w64~#d zNPL29S)V*X8QdIX(aK8AZQS9=(nKAh5Xc>>dV);rM$65mmn4*xmHmLtXk>ZDuNILx zxjJj|08+&HXYM{8X^a18J1z&k8m0CDVR}n>?IjxNTk8DBjts&#L6XL|i$RL)hQiV*?#^JQgkj<9aIbv>=tEIPfu!*7FLRvO_t&NubFLC0uzBK3 zA0b6qwi~7+b4EGhOXUt1Kyl=os9jMvP^sEb8LGLpfq(+9x{Pd1@58J3qj_J3me0FQ z3U$(jW2L4o6gwio;zzl)skyT6hxmy6jJy4}KDFEtYo=PFKz>2uyUa3&@-=W`iKaVn zLCR!w(_HI+h(@qtK!$W(9F$H>!K-C|8PIukKnpyJI3VW}Q> z8mTz%Z9xS`Niq5N^m?9a^&dlN)~Ec^e{?h>2iz+f70rBMOCL;O(eUPi60TUjl+KVz zgxY_iP5871Msu%JeAvPBlB25m4nEfR^gMW9C9^DY1^e=b=A7;+cJG%X~KU$CkceqN~5mXj>&s+%LQLd7pq(KOIZApatoPlu)o{S`IR4IvB_+UgA}H# z_*k=B3eFxAWbKRR!K}8fLlA`l?q+W+v;W{s>Kfo&QIhpYF`Mc`D1Ve_@^{fjwTbIz zX<%nuwQ%SSk>R2VSM$nFyX1qCIkGcZ5+r|2*uHygp`pY;y9m(pTUbtJIcD#IioHB`@e)OfCsh>ePv+U0RtqM*3fuP$ta=Bkjx2* z5JXO#k+rw>_ucI)RBGev_lfdjid$rC7;%q)A?7=6bUr8dq;za(L3 zq}oK~^b(6WA86q)K({T&D8cjLlYa9i4x>e2GLvDnQeugG9f$dxGKlHo|7>g@4EMjt(JjHZmp_-*cO-1p>06x3~kb>Eb%~Tkl?~@?`hE-{nsgLa;$6s z&ZKxAz1$P=)=t}R8@cEAlQs*Bb`riyeFVN~ihVx zg~D&eWaScnlQg8E?y-kwR+(e>2^71&e;FmfOV=8d0UKkH zzONoScfD8iWvrx<0hDHBYMo`CPvVDYZTd4Ei46pT-P55VtU4g36XMd}q(!9C%XpP= zrFYGCy4(tl#ETo+4`6=U>g|U=Qm0L4WW#keeXAfu5{n>0-%os3ggewLPI9I{%`A$A znVTGd&tjo!{dU%@S>bouVw<~>-mLwV5ro@aG7V=jgT5+8GU$BPyB`Sr1u`=p-HTo! ze(lc$y@N%!k_jQG-JU@Ui?jzs+!QH}qMX2w44)#z3re{7i#Z@u ze{4@GD&hQ?I2Y*>M!19#h)Ale9+H^`-^EUn1SM?1Zz}r8orS+=iswpDVA~VOtp$ZC(Xe zFdPE;&-UD7-q_JgNfw@r6FV%t^Nf#B~PL?-*AWd zkxY1w6TbgxVG1Vg`shf*E zgvuOd+Ztbitpy~`vd4yCTR)QVt%v_{yE=g}>FV%4Ay8KOhd%#z-9w)$`ft5VEOTE> zOs+Rovjegt`sd>~?@3iQ1NCk!+tiA!^i}ph>Q(1>06Y~BcXvI3XFtr)8_K5hi5hm= z2=s7AyaPGD;7b--neNL7l`FilQ83iJ!eO{C&t3^_=h_wuNR_W31XG!0a6~HPm;b;< zR;X5XewHX!jEQdTrt}r8S(zG4C*5Sfk2`N20{)tYrK(ZVHTW-Tlzz6l#N!u6yr!i% zHb%Bu1v?j+nZDKFg{h#b2;u=tU$nBScBoZ6?i=025RD$8Ei5Qti zRyIhCS5Bq;h)9Qf>7JVXXF%1J;f?MG?$35 zggW?1@9!??*Oc+CIhi2L`648sPEHR&%*Q+9{W09jQiBlRL9SpcIj;TOtO#{}@g_Cp z+fCEr_@30jP!AJ`H{69!uv7b|>Jnbq`3Q+GTIUL(l_qe?`q5lF}4}(pbKCr2Bt1i;IIVv;43?sv^AREZ*dJbOyPTt-qXq}Gzm=X zr_KT={Hzr(j(vG@lIM?##X2W9=A9pZXIl8XaOKTtHptfe8uJ99mF?Y`?EC!K)Pi<5 z2@zk1n7FY(&Zckgn+@0HR8O3|eW^9i<7-fuY?5RQjh5`Mr@dXB-XFXBP7!FiZEh30 zsq!pqI#)i^Z++L+B0T)`>P=Z%CQQ)UzPYwVQx-7}oEG-@;3^&LI=z)8S;W#`$-1Z6 zVca2!e$~6$2H~{vW)ofqJGroSlS8`6y%~rl$+uCyUX#=!OoAQye~Wi7U6+$ni-bgr z|J$%Zw`kFloCfK_iletCkvlB{qOR!%bX?-1!%PrjxtyG5gt9Rs*f3n+mUrmTIY$|CWKh5jx9k~2_@8_Cfn}WI~Fb}OzJPb8}<8>YT{xG>xgQC zUWF9PLJqsnO=bb z+eeu2j5smzc@8R_7)kl4(MkvnNBao+Yp92VYbEzgig=m zsJT%GHRGY!@F|k#S!}m~gq`bu*VXdZx8#%(^_M#aNkTrW&7F>U4<+i4A|nqp{I8XU z*d{aO^?gb)F9?$fJ3q3XEMF(%bc2x2c#fwPiC^!SL@Apc=%Kp;A>|ukzC$r9M!Me& z*o-K&q!)@+&duSh~G{N@fScW z(fz@24xMK*Z&KUc3&4!kpVuWIwPID%p3+xQ8@H+;#TChuJYsEIIlmP&-TNx>Mcts} zWVY3DNHU9wYl+HQnDr9ujs)RKv>TtwK{92kje)?I-iJ}i7|2fKNQCdrx>t?ugBhQK zWmLqeeF`IBC_#@lly_jQjsEl3tnIrPA-FHeo-*gbTph_Q8ah5u^SF zPY!~4)#Q4LCp>|xuZ;RMmQnTk*lj5#L`f@XX<}znw~~ad^2WS4G5f8@#;)ce#YQTh z_fGMnc~qeN*@#PWe&5*UQtS6e-G8P|{1hvfW-?2T5-?(I*hXuiMI-NE_lOy?`ZcsX zf55K&$~A*@J#-5EI`_%Er3ZU3Az+*%RsOAlerb|Lj-k?9irR(Zi490SdBEnbMmVqh z0Qc14j39i({ip!o@Z@})A?dH~2GVG|9Q>@+=6Sb8%(yNf8#1U>nMY(L*h=1SVqtqS zbwG(r<3#7`+9L6&8CPm8TO9jwsPEK6*Dmdr2_mkbR%{at&EeK-2m z`%g)&M;7aBn(vQo^Eyr4l6|G96x%|Z$Vbv z#91q&uiQ=FL%|amoA>O$%bPogTNMcLXSEC|_{+BE*_+kMLwu?Z`TN4-g3e1%$gE+I zoI%@l%w|qbRmAu@^Q78DYKl@qA7sz^3Z(GRGmRw5Rl*IIvyrRZ7Dx->{B+p_6jY|j zxtrW|JoGG%M{R+h|JD*cRy^~(RS^*WNqEs*?!#FP`r6s4_1U7*4j+bla;d0d_K4r zCLVZ}&#^BwotjV?+Nft1Y?U~mNtNZ{o$!FHl^L}2GjWQ#zgod7+V(ot-LES9Wz`CA zD9P4;cFjaYOT+J^Y7`&le0{OFYIX3g{`L3_!65SVyaAD1QQk(7&DqKKt_!KT`RAkB zPsa|Blqjv`0O7&tbkl)K#mTm=i%W9mB_X0y)S>t&>GQr<+^Z%~fSNY}By;pzRTP$>4fmyWl0P;01TUzMP zF3+gRi9G2=gL&BmXE`}JIWx1SU&7{aPAQGRXkhiKet3F*Yy)@d6A$J%+uNu&QrNBtskKsp_*Oxl5;hGuHUGp5uRiL;oKb`HRv2 E0Sb4)nE(I) literal 0 HcmV?d00001