Foros del Web » Programando para Internet » PHP » PHP-GTK »

ahora el pixmap

Estas en el tema de ahora el pixmap en el foro de PHP-GTK en Foros del Web. Que tal Maestros : tengo una duda con el pixmap ya que por ahi me marca un warning en el gdkpixmap para ser mas exactos: ...
  #1 (permalink)  
Antiguo 09/02/2004, 15:07
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
ahora el pixmap

Que tal Maestros :

tengo una duda con el pixmap ya que por ahi me marca un warning en el gdkpixmap para ser mas exactos:

Gdk-WARNING **: Creating pixmap from xpm with NULL window and colormap

el codigo que utilizo es el que puso el maestro epplestun en un post aqui en el foro :



Código PHP:
<?php
dl
(stristr(PHP_OS"WIN") ? "php_gtk.dll" "php_gtk.so");
                                                                                             
   function 
delete_event(){
      return 
false;
   }
   function 
destroy(){
      
Gtk::main_quit();
   }
   
$Gtk_Window = &new GtkWindow();
   
$Gtk_Window->connect('destroy''destroy');
   
$Gtk_Window->connect('delete-event''delete_event');
   
$Gtk_Window->set_usize(200,100);
   
$Gtk_Window->set_title('PHP-EDDI-DEV');
   
$this = &new GtkButton('Aceptar');
   list(
$pixmap$mask) = Gdk::pixmap_create_from_xpm(null,null,"window.xpm");
 
$button_image = &new GtkPixmap($pixmap$mask);
//   $this->add($button_image);
//   $this->show();
   
$vbox = &new GtkVBox();
   
$vbox->add($button_image);
   
$vbox->add($this);
   
$Gtk_Window->add($vbox);
   
$Gtk_Window->show_all();
   
Gtk::main();
?>
bueno quiero comentarles que si muestra la imagen solo que envia el warning eso es lo que no se por que.

pero si inserta la imagen ya sea en un boton en una vbox .

gracias por todo.
  #2 (permalink)  
Antiguo 10/02/2004, 02:31
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años, 4 meses
Puntos: 5
jeje tienes que hacerle un realize() a la ventana y pasarle los parametros oportunos:

Código PHP:
dl(stristr(PHP_OS"WIN") ? "php_gtk.dll" "php_gtk.so");
                                                                                             
   function 
delete_event(){
      return 
false;
   }
   function 
destroy(){
      
Gtk::main_quit();
   }
   
$Gtk_Window = &new GtkWindow();
   
$Gtk_Window->connect('destroy''destroy');
   
$Gtk_Window->connect('delete-event''delete_event');
   
$Gtk_Window->set_usize(200,100);
   
$Gtk_Window->set_title('PHP-EDDI-DEV');
   
$Gtk_Window->realize();
   
$this = &new GtkButton('Aceptar');
   list(
$pixmap$mask) = Gdk::pixmap_create_from_xpm($Gtk_Window->windownull"window.xpm");
 
$button_image = &new GtkPixmap($pixmap$mask);
//   $this->add($button_image);
//   $this->show();
   
$vbox = &new GtkVBox();
   
$vbox->add($button_image);
   
$vbox->add($this);
   
$Gtk_Window->add($vbox);
   
$Gtk_Window->show_all();
   
Gtk::main(); 
Jeje veo que estas mirando el codigo del PHP-EDDI-DEV jeje eso me alegra mucho!!
__________________
Usuario registrado de Linux #288725
  #3 (permalink)  
Antiguo 10/02/2004, 14:22
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
ya salio jajaja ya no manda ningun mensaje

gracias maestro epplestun
  #4 (permalink)  
Antiguo 11/02/2004, 06:55
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años, 4 meses
Puntos: 5
jeje para eso estamos jeje ya lo sabes jejejeje

P.D.: NO hace falta k me llames maestro por k no lo soy
__________________
Usuario registrado de Linux #288725
  #5 (permalink)  
Antiguo 18/02/2004, 11:56
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
Que tal Maestros:

tengo otro problemilla con lo del pixmap bueno no exactamente con el pixmap sino con el formato de imagenes xpm.

mi prgunta es como puedo convertir mis imagenes gif a xpm sin que se pierda el formato de la imagen gif.

hice un script en el que genero imagenes gif ok para que las pueda mostrar en una ventana la tengo que convertir a xpm , lo hago con un comando convert de esta forma:

convert -colors 14 imagen.gif imagen.xpm

y si lo hace solo que los colores me los cambia y no se como convertir las imagenes de otra manera de hecho tiene que ser por comando.

gracias por todo.
  #6 (permalink)  
Antiguo 18/02/2004, 14:00
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años, 4 meses
Puntos: 5
buenas payo22, no tiene que ser por comando jeje puedes hacer la imagen .gif a .xpm con PHP, lo que tienes es que generar el algoritmo para generar ese .xpm

Jeje pero tranquilo que no hay que reinventar la rueda hace unas semanas estube hablando con un colega en la lista de desarrollo de PHP-GTK sobre este mismo problema y me paso un codigo que hizo el, aqui te lo dejo para que lo veas

Esta es la libreria
Código PHP:
<?php
/**
* function set for image manipulation
* @author Jonathan Gotti <[email protected]>
* @copyright &copy; 2004  Jonathan Gotti
* @category images
* @license [url]http://opensource.org/licenses/lgpl-license.php[/url] GNU Lesser 
General Public Licence
*/
/**
* get the palette
* @author [email][email protected][/email]
* @date 2003-12-20
* @param ressource image $img
* @return array
*/
function imagegetpalette($img){
 
$width imagesx($img);
 
$heightimagesy($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 [email][email protected][/email]
* @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_charintval(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 [email][email protected][/email]
* @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 [email][email protected][/email]
* @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;
}
?>
Y esto su forma de uso:
Código PHP:
<?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($gdkwindownull$xpm_d);
 
$pixmapwid = &new GtkPixmap($pix[0], $pix[1]);
 
//and then do what you want and be happy
?>
Espero que te sea de ayuda
__________________
Usuario registrado de Linux #288725
  #7 (permalink)  
Antiguo 19/02/2004, 12:35
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
Que tal epplestun pues creo que me servira de mucho la libreria , pero tengo una duda como tengo que nombrar la libreria o si es que la tengo que poner dentro del mismo script en donde genero la imagen o como le hago.

jejeje

gracias por todo.

o puedo llamarla con un include?
  #8 (permalink)  
Antiguo 19/02/2004, 13:51
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años, 4 meses
Puntos: 5
Si por supuesto, debes hacer algo como: libreria.php (contiene la libreria) y luego le haces un include("libreria.php");

JEJE disculpa jeje peor se me paso ponerlo antes
__________________
Usuario registrado de Linux #288725
  #9 (permalink)  
Antiguo 23/02/2004, 12:40
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
que tal epplestun:

estoy checando la libreria que pusiste pero me manda un mensaje de error en esta linea:
en en la linea

if(! $img = imagecreatefromgif($file))

Fatal error: Call to undefined function: imagecreatefromgif() in /usr/local/src/php-gtk-1.0.0/test/uso_libreria.php on line 8

si a $file le estoy asignando el nombre de la imagen

tambien en la linea 211 que la funcion imagesx() no ha sido definida.

a que se deben estos mensajes?

Última edición por payo22; 23/02/2004 a las 12:54
  #10 (permalink)  
Antiguo 23/02/2004, 13:06
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
ya me di cuenta de algo que las funciones imagesx() y la imagecreatefromgif no las encuentra .

a que se debe?

tendra algo que ver con las librerias graficas GD por ejemplo la version de la libreria, puede que no soporte los gifs o algo por el estilo ?.

o como puedo hacer para que funcione.

gracias por todo.

Última edición por payo22; 23/02/2004 a las 14:37
  #11 (permalink)  
Antiguo 24/02/2004, 01:14
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años, 4 meses
Puntos: 5
Bien, necesitas tener instalada la libreria GD, y mirar que version tienes, sino modifica la libreria a tus necesidades
__________________
Usuario registrado de Linux #288725
  #12 (permalink)  
Antiguo 24/02/2004, 09:31
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
que tal epplestun

no se que version se necesite ya que he leido que no todas las librerias GD soportan gif o algo asi lei.

ahora dependiendo de la version que descargue como hago para que soporte el php .

por que tengo que compilarla verdad?

y el php lo tengo que configurar de nuevo?

o bien como puedo adecuarla a mis necesidades como tu dices que tengo que modificar y en donde?


gracias por todo.
  #13 (permalink)  
Antiguo 24/02/2004, 12:00
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años, 4 meses
Puntos: 5
Lo que puedes hacer es quitar a la libreria (laescrita en PHP) el sopòrte para imagenes GIF, o sino compilarte de nuevo PHP con soporte para GD.
__________________
Usuario registrado de Linux #288725
  #14 (permalink)  
Antiguo 24/02/2004, 12:22
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
pero como la quito la libreri aescrita en php y en donde la localizo estoy trabajando en Linux.

y lo de compilar el php de nuevo pues ya lo hice con soporte para gd pero sigo teniendo el problema.

Fatal error: Call to undefined function: imagecreatefromgif() in /usr/local/src/php-gtk-1.0.0/test/uso_libreria.php on line 8


la compilacion la hice de la siguiente manera:

./configure --disable-cgi --with-gd
make
make install

gracias por todo epplestun.

Última edición por payo22; 24/02/2004 a las 12:49
  #15 (permalink)  
Antiguo 24/02/2004, 13:14
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
encontre un php_gd.h en el cual viene la funcion imagesx() como

PHP_FUNCTION(imagesx)
PHP_FUNCTION(imagecreatefromgif)

y esas funciones son las que no encuentran algo referente al gif solo trae lo siguiente:

#define PHP_GDIMG_TYPE_GIF 1

no se si tengo que descomentarla
  #16 (permalink)  
Antiguo 24/02/2004, 14:31
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
que tal epplestun

tengo una pregunta jejeje

que diferencia existe entre :

imagecreatefromgif y @imagecreatefromgif

lo que pasa es que con la segunda opcion no me manda ningun mensaje de error pero no hace nada se supone que la imagen que le de como parametro es la que va a convertir a xpm o me equivoco?

gracias por todo.
  #17 (permalink)  
Antiguo 26/02/2004, 01:32
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años, 4 meses
Puntos: 5
Buenas, lo que hace la @ antes de cualquier funcion es no mostrar el error generado por la funcion y seguir hacia adelante, lo que puedes hacer, la imagen que le pasas como parametro a esa funcion es la que va a tomar PHP para trabajar con ella, es decir:

Código PHP:

$imagen 
imagecreateformgif("imagen.gif"); 
PHP lo que hara es trabajar con la variable $imagen, ahi queda almacenada la imagen en formato .gif y con eso podra trabajar en el resto del script.
__________________
Usuario registrado de Linux #288725
  #18 (permalink)  
Antiguo 26/02/2004, 09:43
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 22 años, 4 meses
Puntos: 1
gracias epplestun pero sigo teniendo el mismo problema con la libreria , he leido que a partir de la version 1.6 de la libreria GD ya no soporta gif y por eso es que no encuentra la funcion imagecreatefromgif.

mi pregunta es como le hago para quitar esa version y poner una anterior o como puedo solucionar esto.

gracias por todo.
  #19 (permalink)  
Antiguo 27/02/2004, 04:11
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 23 años, 4 meses
Puntos: 5
Pues, descargas una version anterior de GD que soporte esa funcion y recompilas PHP sin mas
__________________
Usuario registrado de Linux #288725
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:30.