Re: Please, i need use images in php-gtk...

From: Date: Mon, 23 Feb 2004 07:29:18 +0000
Subject: Re: Please, i need use images in php-gtk...
References: 1  Groups: php.gtk.general 
Request: Send a blank email to php-gtk-general+get-4412@lists.php.net to get a copy of this message
You cand use gdkpixbuf to render non xpm images in PHP-GTK, but this widget is not for Windows, so you can use Nathan code: This is a script <?php $file = "path to your image file a gif for this example"; if(! $img = imagecreatefromgif($file)) echo "can't load the image $file\n"; $xpm_d = image2xpm_d($img);//there's a file convertion function too imagedestroy($img);//don't forget this one $pix = Gdk::pixmap_create_from_xpm_d($gdkwindow, null, $xpm_d); $pixmapwid = &new GtkPixmap($pix[0], $pix[1]); //and then do what you want and be happy ?> This is the "library" <?php /** * function set for image manipulation * @author Jonathan Gotti <nathan@the-ring.homelinux.net> * @copyright &copy; 2004 Jonathan Gotti * @category images * @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public Licence */ /** * get the palette * @author jonathan.gotti@free.fr * @date 2003-12-20 * @param ressource image $img * @return array */ function imagegetpalette($img){ $width = imagesx($img); $height= imagesy($img); for($i=0;$i<imagecolorstotal($img);$i++){ $colors[$i]=imagecolorsforindex($img,$i); } return $colors; } /** * get a xpm style palette from a gd one * @author jonathan.gotti@free.fr * @date 2003-12-20 * @param array $gdpalette * @param string $indexed_type 'gd' keep the gd_index,'xpm' indexed by xpm char code * @param string $value_type 'char_code' the xpm char code index, 'color' the xpm color value,'both' associated value is are array containing xpm char code and xpm color value *@param array $trans array of transparent color values * @return array */ function gd2xpmpalette($gdpalette,$indexed_type='xpm',$value_type='color'){ $nb_colors = count($gdpalette); //initialize char array if needed if($indexed_type=='xpm' || $value_type != 'color'){ $first_char = 48;//lowest used ASCII char code $last_char = 126;//highest used ASCII char code //Thanks to my friend RHONONO for the next line $nb_char= intval(log($nb_colors)/log($last_char-$first_char)) +1; for($i=0;$i<=$nb_char;$i++){//initialize array of char $chars[$i]=$first_char; } } foreach($gdpalette as $gdindex => $gdcolor){ //recompose xpm character coding only if needed if($indexed_type=='xpm' || $value_type!='color'){ $char_code = null;//initialise char_code for($i=0;$i<$nb_char;$i++){//increment other chars $chars[0]++;//increment chars if($chars[$i]>$last_char){//check chars are in the good range $chars[$i]=$first_char; $chars[$i+1]++; } $char_code = chr($chars[$i]) . $char_code ; } } if($indexed_type == 'xpm')//choose indexed type $outindex = $char_code; else//assume gd indexed wanted $outindex = $gdindex; //the val according to it switch($value_type){ case 'color': if($gdcolor['alpha']>=127)//keep transparent on palette image $out[$outindex] = 'None'; else $out[$outindex] = strtoupper('#'. zero_fill(dechex($gdcolor['red']),2). zero_fill(dechex($gdcolor['green']),2). zero_fill(dechex($gdcolor['blue']),2)); break; case 'char_code': $out[$outindex] = $char_code; break; case 'both': if($gdcolor['alpha']>=127)//keep transparent on palette image $out[$outindex] = array(0=>$char_code,1=>'None'); else $out[$outindex] = array( 0=>$char_code, 1=>strtoupper('#'.zero_fill(dechex($gdcolor['red']),2). zero_fill(dechex($gdcolor['green']),2). zero_fill(dechex($gdcolor['blue']),2))); break; } } return $out; } /** * get xpm_data from gd image resource * @author jonathan.gotti@free.fr * @date 2003-12-20 * @param resource gd image $img * @return xpm data */ function image2xpm_d($img,$trans=TRUE){ $w = imagesx($img); $h = imagesy($img); //the first case is only for PNG with indexed palette if(imageistruecolor($img) && $trans){ //create an indexed palette copy of $img //after various test best results are the 3 next lines //could be fine to have a better way $imgtmp = imagecreatetruecolor($w,$h); imagecopymerge($imgtmp,$img,0,0,0,0,$w,$h,100); imagetruecolortopalette($imgtmp,TRUE,255);//keep an index for trans //set the trans color to a known one $transindex = imagecolorallocate($imgtmp,1,1,1); $transindex = imagecolortransparent($imgtmp,$transindex); //get all palette information needed $gdpalette = imagegetpalette($imgtmp); $palette = gd2xpmpalette($gdpalette,'gd','both'); //image definition list($color0k,$color0v )= each($palette); $xpm_d[0]= "$w $h ".count($palette)." ".strlen($color0v[0]); foreach($palette as $color){//recompose palette_data to xpm $xpm_d[]=$color[0]." c ".$color[1]; } for($y=0;$y<$h;$y++){//recompose image $row = null; for($x=0;$x<$w;$x++){ //obtain transparency from the original image $color = imagecolorsforindex($img,imagecolorat($img,$x,$y)); $index = imagecolorat($imgtmp,$x,$y); if($color['alpha']>126) $row .= $palette[$transindex][0]; else $row .= $palette[$index][0]; } $xpm_d[]=$row; } }else{//non true color png will use this case if(imageistruecolor($img)) imagetruecolortopalette($img,TRUE,255); $gdpalette = imagegetpalette($img); $palette = gd2xpmpalette($gdpalette,'gd','both'); list($color0k,$color0v )= each($palette); $xpm_d[0]= "$w $h ".count($palette)." ".strlen($color0v[0]); foreach($palette as $color){//recompose palette_data $xpm_d[]=$color[0]." c ".$color[1]; } for($y=0;$y<$h;$y++){//recompose image $row = null; for($x=0;$x<($deletelastcol?($w-1):$w);$x++){ $row .= $palette[imagecolorat($img,$x,$y)][0]; } $xpm_d[]=$row; } } if($imgtmp) imagedestroy($imgtmp); return $xpm_d; } /** * write an xpm file from xpm data * @author jonathan.gotti@free.fr * @date 2003-12-20 * @param resource gd image $img * @return xpm data */ function xpm_d2file($xpm_d,$file){ if(! $f = @fopen($file,'w')) return FALSE; fputs($f,"/* XPM */\nstatic char * ".basename($file)."[] = {\n"); foreach($xpm_d as $k => $row){ fputs($f,"\"$row\","); fputs($f,"\n"); } $pos = ftell($f); fputs($f,"};"); fclose($f); return TRUE; } /** * left_fill with zero * @param int|str $val to zerofill * @param int $nbchar * @return str */ function zero_fill($val,$nbchar=3){ settype($val,'string'); $len = strlen($val); for($i=0;$i<($nbchar-$len);$i++){ $val = "0$val"; } return $val; } ?> ----- Original Message ----- From: "Alfred Lazaro" <alazaro@salou.org> To: <php-gtk-general@lists.php.net> Sent: Friday, February 20, 2004 11:08 AM Subject: [PHP-GTK] Please, i need use images in php-gtk... > > Please, i need use images in php-gtk. I would like display jpg files > in a php-gtk environment in Windows and I not find a widget for that. > Can you help me. > > Thanks, > > Alfred Lazaro > > -- > PHP-GTK General Mailing List (http://gtk.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php >

« previous php.gtk.general (#4412) next »