From 2453c60d6eb59f523d105390f056f0851fb633b9 Mon Sep 17 00:00:00 2001 From: Michiel de Wit Date: Mon, 18 Apr 2016 21:08:26 +0200 Subject: [PATCH] For ICO files, return the largest size (by number of pixels) rather than the size of the first icon --- lib/fastimage.rb | 4 +++- test/fixtures/favicon2.ico | Bin 0 -> 5430 bytes test/test.rb | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/favicon2.ico diff --git a/lib/fastimage.rb b/lib/fastimage.rb index 318d796..4e121d0 100644 --- a/lib/fastimage.rb +++ b/lib/fastimage.rb @@ -463,7 +463,9 @@ class FastImage end def parse_size_for_ico - @stream.read(8)[6..7].unpack('CC').map{|byte| byte == 0 ? 256 : byte } + icons = @stream.read(6)[4..5].unpack('v').first + sizes = icons.times.map { @stream.read(16).unpack('C2').map { |x| x == 0 ? 256 : x } }.sort_by { |w,h| w * h } + sizes.last end alias_method :parse_size_for_cur, :parse_size_for_ico diff --git a/test/fixtures/favicon2.ico b/test/fixtures/favicon2.ico new file mode 100644 index 0000000000000000000000000000000000000000..82339b3b1dbbcf4550b737faf99c7774196fb8cb GIT binary patch literal 5430 zcmcgwX>3$g6n=;X+3|<}Oe_lM4}(N0C5Rv{W&J^*wo?RyAcBe}5&;u}0*OVy7L=Ay zXf2DCb|BCKWlMolQL5~P(pm(H?9=IVT4p+(_4u9l<_-5P?F_|ulQZ|;bI*6abC-9Q zk)%%2V^W_!67o1{&f}6aK$4`mIHg_yeFk(dLWd$O6g@IYf<9UzqCvr6a2=!u;tfkR z^2|^uG_Wl^+PcCf8~An;Y_eeRr06G%J;p#^&`W#&+C~cwO(V;@`5-Yh&vvE5}7=D}8hx zzSiZsXwv%)bp1v^?_?0K0r<(~hP$>PS!Oz9AM8gja~C)xcwp8umJ^iSP?sl_;1=C2bSk~ zIqV~QVl4FGK3B%d6U`1WoP*7Cv2eqV&l#JUPn+vD?W*2P%gW}`tm3iqo|;^kKr@RH zY4PD%lwX-eR~DX!e8cgN$vb75Ey(67=P7uRfkXkImj>G|>W zXT}Kf9?R3aA>af^1Lr9{g9Fh;$_Uj zO$l^k#i+>nrk<;6AmH+WGxBYsuGwFCoxNu==CgNCpi{TXRX2vbuCbO1if2-j?re3h zNurQfd;WoQ1CIgX=!LSTaoLI0hQ7}~IF*{c56&3_xvB{G$g^!>r0?n(@2eryDTfPDUI#V#9aW zg7STZ?<{>w_Rz$F;Z%C1NHmG5>^o7Q;pZ4a&N~_`xcMwODJn;w2}JlghJocb$*)|6 zM6;;npzW%G-(M|XWg}Q{^O>a?*k{U>`xbMvSSk&7lL(#*;uuFO`zov&EV%jH)Lg2% zgzt+g|Kh(*E?9z>Xq;lZelGwwpWpu*zwftvA#(Y?#rzGTQa}Ew7yi5P_g5Visdyjc z@z<=s#M9dK*LSCv{F%%UeQ!jK5^1Z6D)T6KJ>Z&m?k z4s&xt950}*S?DE)JO+L>j?`HWTD#FjJNJ5MSBZx*QRcUd+Rk}eMzi`HHqe9156*rH zyYdU2@^}@jH*Irke2V^KDKA~wEO>iR1lLNDo6Cr&JM>i#tdtUu!-(<5xroL;azZ^F zI@+pt$MaqZF3lTHjRpDvXs_3UZruscS4*2{$lJ!Zr#=q0S@2C0F-D)@+om6Pm0Qix z&hJD+4D5^7IInszx)[:jpeg, [160,240]], "orient_2.jpg"=>[:jpeg, [230,408]], "favicon.ico" => [:ico, [16, 16]], - "man.ico" => [:ico, [48, 48]], + "favicon2.ico" => [:ico, [32, 32]], + "man.ico" => [:ico, [256, 256]], "test.cur" => [:cur, [32, 32]], "webp_vp8x.webp" => [:webp, [386, 395]], "webp_vp8l.webp" => [:webp, [386, 395]],