From 468304b26543cd2c4ccbf3c643abff96271198d9 Mon Sep 17 00:00:00 2001 From: Nicolas Vion Date: Mon, 27 Oct 2008 19:14:32 +0000 Subject: [PATCH] * Add working sample program dithering.php (open logo-caca.png with Gd and render it with caca caca_dither_bitmap_gd) * Add a function to fetch a buffer of gd pixels in php_caca.c --- caca-php/examples/dithering.php | 19 ++++++++++-------- caca-php/examples/logo-caca.png | Bin 0 -> 7526 bytes caca-php/php_caca.c | 33 +++++++++++++++++++++++++++----- 3 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 caca-php/examples/logo-caca.png diff --git a/caca-php/examples/dithering.php b/caca-php/examples/dithering.php index 646655a..bb67827 100755 --- a/caca-php/examples/dithering.php +++ b/caca-php/examples/dithering.php @@ -1,15 +1,18 @@ #!/usr/bin/php5 #; zK~#9!?Ok_VQ|J1BPbMJ~NSGl31Q`OdG@>X{D54g$2(?~qe{HXAuU)piy>0EdZT;L1 zwXLnAt-aOS>*#f$9U@`{Q4j$~2(tHHVTF*8o!=j!;czlYLIUXJ`{9q|<(xO?JkNQb z_t^(htJPo*GY8Zh3Fa6u$ACG^F<_1XbC_em90ML~^!4@i_4Um$UKP0Gr_NfB(BFbimyvt_ki~Hc2f?M$z*HRtl7GC>oi~911^Gc zb90lElf`1OcEpSBx;c846Pa4x-gv33sB;LZ7y0}9-@A7Yi^a|{zzTY2LP7$M$J36W zA=C>Asoo5C%~!cnkzd2RT6ISxmB3Gojg38d@}#@F`y2zNgw?B8U%GS&J`(80el~6$ z;;=5kz{$ewjzKVy0H&-Xc zoMV6`=7(})G#dTP%4Bz%6MXRV&p$tV_UxPpG7q|PZJk>ICP5$&95`@b{rdH~)Mq*} zw#BC!r#=9{nc}dK6AvG0Yis-Bi!bI@z~nf8{`_mNz1GswqWdofnfCY9n{XJD)Jl~~ z_0x^4du>Hk&=S0u0(&AAImZT3VW3>SIvo&C#n&q&@%ug+e{KG>J+e!Uqcr z3+F_TekaP8Uw*lC>C&A$cdAq>-2*%v7+Y5+v*<2nO^ZgOUrN{jA8BlCwB21`?nlzM zw6qiz6@Bu_CuL=2y8oT;>dBcG#By|XB2z7!pGKn4?8!r7q2}wIJ9p+7Fh+=@M~|L4 zbH<1(fAg|ck!=4d{ty~Mc{nh%3=j&1YPA}Ip#M1r)YjJWcsz+j^84?<=jG+``FtY> zvz=U1B4V^|1}oyql`9H`!baYqS;T<+{QU0j?v|F8l9CbtKv`Ltu0p97vHszqta;WY zy^phdMaQ`4KYjZ2=FOWQOa`b`psl@i!-fsFZ{Ife+%T5!ihyu0x|`LniegWkp4*>c z2Jm>iUAuOjJ9kbhm70E*H^V)Q<+t2_;j~?6c6RmywF3Bj{@%TN&z?P7S664^DRdHz zMRyKm`Z^FPo=(owe8E9MK@Y+T=$%*;G-;>6XfS54Ij?MYsA*Lg0?g`R#SJHkw@ zR8LRO`mPgf z?$v9o!j;IFfG`{i~NJz+i$$+-Dw#}P2=jZ1eI)I3`i}eo=W%)W& z9IUBX$rTWGO1CyF7HL0oI2;rTb)PXnrBZ2Rj^3mM90nWZ6%gj-=j+V0#jj71`T&5& z-cIf3=;-MCPYvC@d-skVJM=#C;q3YAB3GcH+3N>Xs#Wa+y_(NVCUfJ)jrSP?{_~&z z=%v0J)oJ^x$IKP+^}X!`EZ)O`Vf-+;QgO5HUUOfU=BvLOn=@~LW!HbsC`00AQJ4$oi;QL+fT( zB06>RN>$f{kiesnE0+6*nS1?xBZ6JOA5*HwR0he20#8KSjsfToKm5>&)7942KJmm8 zBO@b-@#X#tH!XP>hcRQpwGZ$QT*+wZ?;hLF2YPv}b>VD(y_1~0`A0=Z6JoHstA$D+ zF&)jY+SF?Gnd02;;r{VSYN{XzR904cczD>^+0E(|AeYP6ty`Csm4z68`QbEkJ!S0! zz2D`Y7t4_T2|O0}Y5Ly~gJ(-}3+u}bP4&<9Pt)wlCjM@5L&d3LgXusoyzs&sZ@l5{ z?QKN{SW~*)x^+vJ`ip&nEbvoi-z(NoAB)C38=LI!#?mTR!cj5e;F}E{@{Z&u zzx>N9ae)yiFy_8*;dh((qeb=QMyL+}_~x5$e0+SOqM}ZnIyD;^P+qR*F$`z>nXQ9M z#7+E80Dv>aVe87|Ko9S=3zunk+K$0qLnl7Bay^4g0{|q4$JqZVF0^qK<0xsYJYAA& z%8_^O+BU<1X@ep7U!7u~(IwH9&W zjvYJHYPDY5bNcoGl}aU($)-NfV&5PF77qaMqPvch28-3JO5* zTtX1hh3fEn(#A=JUbJ8Ew)oW7lQy|gCuH)z_uhM^2RUrA0%Q`IUc1KJYz``c^h#nn z&7K4oDQE~q#M=P?P$(1`mbQk5P^&|ty9E3Q)_lY~%ltxn1pP!jfruyQ6I>%OvEz^s z9JRn+rn+Z+B{bcJMR&vtT6iCC`TuDK9NCEwx~ofl4T9Xg;}=BQB3)-TU{oskCilFyx`slbl$V#A6~CMk1H@u+a&mHR?&S81 zud~Od=!YGMln0Lo{X)T>tdlZ@T=O+6D=R4}X*xDxkw~<5?OIc)4*;m|?bvtuj8dtz z*kd(o8Q?^wlJVn#>)(F+ZJM;8x8Hs{FE0-{9SRktvmcHr_@knnDhsn*)wapYv=-nd z%kksK%_^$FSoZAy?QefOe*8Fm(BF-<%r8_^gtekCoZD7+x4Bju*3jTaU0GaU1Qv~X zz@!kH;oiU>3t==UjG4mIuM#YY6X>=DR-DSD|!t2$%yz0B! zah9XYY>q@)3vF#}He3P4#l;A-d%1tuqme80ElhGsM2r{R^=QGxg`R#ay35LdaI?$; zrCK#KB1EB3Gi=_~43W=oVX+guo!@ovy2#}i z6nb_tU`Q<7lX+rPK4yxhq@?`%>#sIh0o%84hf_Z;FfuuOnT_sB8+XkI3ANh zxaRM*)y*ssWeT}msjw{rPM$oeDO}NjPNK!kw{3d<>V?tnv@s|1GQUuN4=+PUdN?@G zECc#R1S691xELCZw!R2LWEj$HUqC{#BfPQZFEC?l{9}ZdfA+m%&1WLsF4Eh7W*IOr zGOW!b0sy3@rdpo?2wy*YMxASP5;fL8TresG0EBq@nVxlGBQ*DQTYRpm4EW`jUuMt7 z1wqid$mO$14IQ>Q12`N`L&JCn1$ek>HbbpcLX%14`rdZ2MB+kqbfHd2q)@BX`~NuG z+}GtrcYR`6k|9^FSSG3M9#_rDWb$**J!kz**mm72Y`az_qrO-s`6>V6(SnOd3o=I} zqdKysOCw>97hX1GvGxlE@Dmdrif6G{)@J|$rLDCOhTkTqVyt0Yk6`f3Eu?E*>o;uT zcQ)|#B)N=AC5Uvcgv5t!qJ|=Hr>UmAz3~BHKoftw5TmN286IDRASlFhyu%i+rA}w{ zNa5iy004zTNls3-$sVAK3#B*O2YO@u!w7g=nPbnTlL0lM9IdWQ!umzNyOIak_R3$N<8 z7OFd&HPqLT=2BUa#Q`-VKm@Ddl}P{qC*pWwSw%#eu;?AbHW9&nJ{jdu@-001J|`W5t59Zkm5cn!hBff2^?)6|2AWs)m@)JH?8)eEC_ zo&Irw5w+cI+CpUjKwn?qu3fu!@7`^;7Ig67L3jtHNbf+(v~(>Q5(~@Q8w{>`vNiij z6x8zcKaxw`343FSKd&a9TH_$!PAYiJ?!zT078$N(2=rCU;IX*G(8Y+s0|yRVxpKw4 z70}(?eeBq=iM$P;9>+jlC085T)`cm1nu!>Zh-84N%K zzq}dl)057|ZK*Y`cQ^67tn~Pg*7YD=n-CdC_{f;%j@{r3|9a@^FPa_-2vF?o!*sG^ zw{6>IsOKh1uk|}&D<@4;PWjcUNetbocSn@UWruTq`RBQRi=;Z%B@Tshwl{2@NYU{a zl-D>ZMAFfpZ~pQ6$$j7EoYUr}YmgMmLF9`J4-Z#VRG7*D9Bx7h$~+h5G*G`|kgu)y z)e8a^7tHjYBJ~el{iUME?DqkvfJzNv?Y6{I>z*caH{<^iiSnVr#nJJ?Z20jcJNri? zV-b^NW@eho0EFH;J+1QKiB|fhFa~F5PNx-J951|VBzlfn;$~D?93vDam~Q_`4EaVn zZtHj#xyIfOcv=boz?*>#*@{FWvt1F>iLSxE$vl0Esm$La7_5OQClC>9_fHP)sUV1e zk!LmmI}Gj-pGm1dK0>!AejBgk^(t@m0szD^DMAYAqP?}<3_AdhYgMJwzyP=%uNPsg zDMe$hRF)`I0Dv266ylHtWC1c5(| zest5M2ftS=`s-!UrYu#xu_Ze&BG9(|8zVFZZH5Rsa^wg+u2$dMvG4L}#H($l6Y&cc zO;H((_M6c9RxOfC-YFDNzm@#+rjpyIsvnYmU8?GxT+)i3&X)a0kNxG%m>^+zCeunk z0~id(nKNhLEz&xN`hU#N%&E9-Yg$8O95&q#av0Y*v1km-ajHS)WqzSgEL&})%3dv$ zDJ%N*N*iU{FaSWF-!6JOTX9*B8SzNiGI(1OnL=Jzdk=98lgTts4NXi;eD1mD_U+p@ z!J6O|b`J3$TO4ndegS%@PsI^4*JC+uYLR?6;)JSE003Cv;YFv=rapN%+mA0Cyi`_X zP_iGXz{ZVBYU!C8$(uJO-7OY+&U+|mLZQlUcMCKjRW1Dd{GNUGS+nhcFTVJqs;cUb zKmM5Lv8k)-Xju^u#+kRkfoQfaF(MHkxRTL3JeV34t6O1!O`nhDxM}os%_6YJ*=<<# zkhK^b>mN2E5#MR5ktyVA2q4;7%l=!VY9EH&NGK*rQP`y{o;>GyeZ=w=6B|Xf_VsXE zCZr9b(df@U`;5V0n9TqT2J`dJKPMz4l$K5~1tbdDb2;Ac%qNik9}Fo`AX*|Md$xY*EP8airo`5*|wLue-=B|UPbM5QQhsVZx2P^ne=RHX$qZkRudi=WQBihwc5!j>-o1N=h9_RA ze3f@j_rF2zUNARIn^Y&G3A@s0Be65N* zC=&e6EimpmCzHvC4jtOGX_H9~CCe_FL?UT>)MaI5{rKaL4Gj%<@0yW1h>(>F*?u_{ zx8Nh%mX}?E0eC}OUR@P~>Im;7+CISdaAH7H>u7_9PzY`EPpzhVNIcTg-;-Zc3U}uj zc|hNP|NUjlOs!wH)$43qT3SB)*JtN{J=eq6-{>~T-D~U06!?fXuLgpkzs5ci*rgJ40LSrG6n*)8mJA0ms2c6rvkaOoIANJz-5ufCd|o<1`@;}E!Z?b=&!y=7#(1^{4C=vNZc5v|R81Oq*S z0UQPs;O+%r^#K+tooI}|8;eXJiDgo?S_uH?8xa@^rdy1~ixm6*_4Qr7dbPH;Hsj1$F3-ZC4TC^=ZS5vRtWli5ET{G+uN(2A(+a5(b3V5KmOR<9R{<+4V&(VS!$i4Vk{PW z;lc$&R~Q!;XW6tg8f~^SfXCxanr5xn)lF%B!a=@W`$xXHk@)j!%^xO_Wf{Gme)?&| zHYuuFA?v2!foQo$c+X_2r3^ zY{IX<^xEEoUrosYxjo$e^A$!8ke;eh^19LC3<$yi03ZiDZ2Z{cEWg?&zuGMQRKI<< zbm>wbA0I^fz^P;T^5to1X&erR!{N*@15#5{&!0a(_1~b>KZRyn=)O@6j1C9=r0zGP z77FEzLoa87i4EpZj&_)p6Jk=M?-pttu7<#3v0i=k)$K38Vkn$zTL$dfwaem{5+Lo> zMJ|+rjR0j{d6!xwmz}GVpQ)2)HJj&UdNPoBIC0X$B%j|N-C@#eOVZNPmMmG4mX>CV zh8d=oC`}QBT`~CW;Sk!?ENj_s4U!LUD(_k1<|Af2f=ijaNKM%y81_AC`m}U9{eura z*tTt(Sq-r)WPng8WV6|WgM(K5CG5I+r2nn~7$gr=K&1dGH3U#903`jYGQRAcD#i6l z>J%Xqz-;ocdt)Ugm<|9Cznw4rnhO+a$i<#o^Atohshm&p9Zzw+1OL}xY&=WZBU0qH zNx$YQ@AMiuB{Vej=+UF$;o3_eY3aEezNG_E~Hin>*u;}scd zfmCnOhq2kx{YWR*0NX%O(k(k(E6=D?wd*MxIdI^>i!Z)tLk95q{N1~EA3S)_+)DXr z26lrl@#i%*E#Q_MD3$KLt7;YMS`V(SQ#JAp?urZsW6z#FZEbDeeDjTw8nYRPJfnUH zw@>mN52$SQjsd%u!f=o4Y0P--+BKUSVsKo#bV<{=RVI^NzI<7;GAs^BS{>*`F2rL= z=y^0N&Z+DW$}{Q}MP2fYI-rwH@b%YUzw*i})5ie4sI9H#@x}{o2L=Xma`e9sQ=w3x zP$>Azku?r&E7A+)YEQ~dL;G1?%_`4tSNDh&1)Zv1vGPV2e2daWNlD3~MT=&b0aL`1 zB}@pxy?o-Hme*3CVgHn3PM4u=yG5)v2~7#$t$;o&iDKRxpdfI}=6XJ=value.lval; int resource_type; void *result = zend_list_find(resource_id, &resource_type); + if (!result) + return NULL; char *resource_type_name = zend_rsrc_list_get_rsrc_type(resource_id); return (strcmp(resource_type_name, type_name) == 0) ? result : NULL; } +//Fetch buffer of pixels from gdImage + +void *gd_get_pixels(gdImage *img) { + if (img->trueColor) { + int line_size = img->sx * sizeof(int); + void *result = malloc(img->sy * line_size); + int j; + for (j = 0; j < img->sy; j++) + memcpy(result + (j * line_size), (const void *) img->tpixels[j], line_size); + return result; + } + return NULL; +} + + + //------- PHP Binding's specific functions ----------// PHP_FUNCTION(caca_create_event) { @@ -1162,11 +1182,14 @@ PHP_FUNCTION(caca_dither_bitmap_gd) { RETURN_FALSE; } - printf("image size: %i x %i\n", img->sx, img->sy); - if (img->trueColor) { - printf("image is true color\n"); - RETURN_SUCCESS(caca_dither_bitmap(canvas, x, y, w, h, dither, (void *) *(img->tpixels))); + void *pixels = gd_get_pixels(img); + if (!pixels) { + RETURN_FALSE; } + + caca_dither_bitmap(canvas, x, y, w, h, dither, pixels); + free(pixels); + RETURN_TRUE; } PHP_FUNCTION(caca_get_font_list) {