Foros del Web » Programando para Internet » PHP »

Libreria php_gd.dll o gd2.dll

Estas en el tema de Libreria php_gd.dll o gd2.dll en el foro de PHP en Foros del Web. Hola amigos!! Necesito de su ayuda. Necesito dibujar circulos y rayas en php(para modelar un grafo) y no me resulta. Ocupo las opciones de la ...
  #1 (permalink)  
Antiguo 19/10/2005, 08:57
 
Fecha de Ingreso: octubre-2005
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Libreria php_gd.dll o gd2.dll

Hola amigos!! Necesito de su ayuda.
Necesito dibujar circulos y rayas en php(para modelar un grafo) y no me resulta. Ocupo las opciones de la libreria mencionada arriba pero al mostrar la imagen lo unico que veo son multiples letras al azar en pantalla. No se si sera el navegador que ocupo, que no me permite ver los dibujos, o que??¿??

Si alguien me puede ayudar se lo agradeceria muchoooo!!!!!

gracias

willyneverdie
  #2 (permalink)  
Antiguo 19/10/2005, 10:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Deberías indicar el código que usas, como lo usas y que resultado obtienes.

Lo que ves no son múltiples letras "al azar", es tu imagen generado (pero en "texto plano" ..).

Normalmente ese problema se deriva por vários factores .. uno de ello (el más común) .. es que mezclas algo de HTML o salida en general en el script que compone tu imagen y en algún punto hace uso de header() ...

Un saludo,
  #3 (permalink)  
Antiguo 20/10/2005, 11:58
 
Fecha de Ingreso: octubre-2005
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
Hola!!! bueno este es un codigo de ejemplo de lo que he intentado mostrar pero no logro, me da un error en esta linea
header("Content-type: image/png");
y el monton de letras, porfavor sipuedes decirme que estoy haciendo mal

gracias

willyneverdie

<?php
//cargamos la imagen desde un archivo jpg
$image = imagecreatefromjpeg('images/civic_full.jpg');
//asignamos los colores que utilizaremos después
$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
$red = ImageColorAllocate($image, 255, 0, 0);
//definimos el texto de la inscripción de la imagen
if($_GET['caption']) {
$caption = $_GET['caption'];
} else
{
$caption = "civic";
}
//leemos el tamaño de la imagen
$width = imagesx($image); $height = imagesy($image);
//a lo ancho de la imagen dibujamos una línea horizontal
imageline($image, 0, $height/2, $width, $height/2, $red);
$count = 10;
//bucle responsable de dibujar cuadrángulos
for($i=1; $i<$count; $i++) {
//tabla de coordenadas de los vértices (x0, y0, x1, y1, ...)
$points = Array(
round($width*(1-$i/$count)/2), round($height*(1-$i/$count)/2),
round($width*(1-$i/$count)/2), round($height*(1+$i/$count)/2),
round($width*(1+$i/$count)/2), round($height*(1+$i/$count)/2),
round($width*(1+$i/$count)/2), round($height*(1-$i/$count)/2),
);
//dibujamos un polígono con base en coordenadas de los puntos en la tabla
imagepolygon($image, $points, sizeof($points)/2, $black);
}
//colocamos el texto en la parte central de la imagen
imagestring($image, 10, $width/2, $height/2, $caption, $white);
//definimos el encabezado de acuerdo con el tipo de datos de salida
header("Content-type: image/png");
//generamos la imagen
imagepng($image);
//liberamos la memoria ocupada por la imagen
imagedestroy($image);
?>
  #4 (permalink)  
Antiguo 20/10/2005, 12:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y como ejecutas ese código? .. como lo llamas .. desde donde?

Indica exactamente y textualmente el error que obtienes .. ahí está el "secreto".

Un saludo,
  #5 (permalink)  
Antiguo 20/10/2005, 15:36
 
Fecha de Ingreso: octubre-2005
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
hola¡¡¡bueno este es el error que me manda pero no entiendo a que te refieres con "como lo llamo , de donde", lo que hago es esto
<html> <body> " el codigo de abajo" </body></html> y luego llamo al archivo desde mi navegador..

Supongo que algo estoy haciendo mal pero no se que....
gracias

willyneverdie

Warning: Cannot modify header information - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\ejemplo6.php:6) in c:\archivos de programa\easyphp1-8\www\ejemplo6.php on line 40
  #6 (permalink)  
Antiguo 20/10/2005, 15:40
 
Fecha de Ingreso: septiembre-2005
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
mira willy... primero que todo..
El codigo que tienes puedes insertarlo en un archivo en blanco con extension .php (por ejemplo imagen.php)

Luego cuando quieras insertar la imagen la llamas asi.. (dentro de cualquier archivo)

<img src="imagen.php?caption=algo">

y listo... el error es por que NO se pueden retornar valores antes de las cabeceras...
  #7 (permalink)  
Antiguo 20/10/2005, 15:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La "llamada" del código es por si hacías algo de lo que comentó mgomez que es como se debe usar ese código que planteas.

Un saludo,
  #8 (permalink)  
Antiguo 21/10/2005, 08:23
 
Fecha de Ingreso: octubre-2005
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
Hola amigos!!! muchas gracias por las respuestas de ayer me sirvieron arto y tenian toda la razon, habia que llamar al archivo desde otro arhivo. El codigo anterior hacia rayas sobre un imagen determinada. Bueno como mi intencion original es dibujar grafos, baje un ejemplo para ver como se hacian rayas y cosas asi. Este codigo de abajo hace un grafico de barras pero lamentablemente no lo pude ver, segui todos los pasos que ustedes me dijieron y revise el codigo tambien pero no se que esta malo, lo unico que veo es el cuadro donde deberia ir la imagen y la tipica cruz roja que nos dice que no se pude abrir la imagen. Ojala me puedan ayudar...

willyneverdie
este archivo lo llamo "chart.php" y lo llamo desde otro.
<?php
require("Chart.class.php");
//cantidad de valores
$count = 32;
//objeto Chart
$chart = new Chart();
//creamos una tabla con
//valores aleatorios
$array = Array();
for($i=0;$i<$count;$i++) {
$array[] = rand(-200, 200);}
//colocamos los valores y
//generamos la imagen
$chart->draw($array);
?>

esta es la clase a la que se hace referencia arriba
<?php
class Chart {
var $image; //identicador de la imagen
var $title = "Chart"; //título del diagrama
var $width = 800; //ancho de la imagen resultante
var $height = 600; //altura de la imagen resultante
var $margin_x = 40; //margen horizontal
var $margin_y = 40; //margen vertical
var $bar_w = 0.8; //relación del ancho de la columna a
//la distancia entre ellas
var $bar_color = Array(100, 160, 200); //color de las columnas
var $text_color = Array(0, 0, 0); //color del texto
var $grid_color = Array(240, 240, 200); //color de la cuadrícula
var $_x_min; //valor mínimo de x del espacio para el diagrama
var $_x_max; //valor máximo de x del espacio para el diagrama
var $_y_min; //valor mínimo de y del espacio para el diagrama
var $_y_max; //valor máximo de y del espacio para el diagrama
var $_range_w; //ancho del espacio para el diagrama
var $_range_h; //altura del espacio para el diagrama
// Método draw – genera la imagen
//como argumento recibe la tabla de valores
function draw($series) {
//generamos la imagen cuya altura y ancho son definidos
$this->image = imagecreate($this->width, $this->height);
//asignamos el color de fondo
$this->translateColor();
//definimos el espacio para la imagen
$this->calcRange($series);
//dibujamos la cuadrícula
$this->drawGrid();
//colocamos los valores consecutivos en el diagrama
foreach($series as $x=>$y) {
$this->setValue($x, $y);}
//colocamos el título del diagrama
imagestring($this->image, 5, $this->margin_x/2, $this->margin_y/2,$this->title, $this->translateColor($this->text_color));
header("Content-type: image/png");
imagepng($this->image);
imagedestroy($this->image);
exit;}
  #9 (permalink)  
Antiguo 21/10/2005, 08:24
 
Fecha de Ingreso: octubre-2005
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
continuacion del codigo de arriba


// Método drawGrid – dibuja la cuadrícula sobre la imagen
//su parámetro puede ser la distancia entre las líneas consecutivas
function drawGrid($size = 20) {
$y = $size*round($this->_y_min/$size) - $size;
while($y < ($this->_y_max + $size)) {
//calculamos los valores consecutivos de y
$y0 = $this->translateCoordY($y);
//dibujamos las líneas horizontales
imageline($this->image, 0, $y0, $this->width, $y0,$this->translateColor($this->grid_color));
$y += $size;}}
// Método setValue – dibuja un rectángulo con base en los parámetros recibidos
// los parámetros son los valores x y y
function setValue($x, $y) {
//definimos todas las coordenadas del rectángulo de ancho de bar_w
$p = Array(($x-$this->bar_w/2), $y,($x+$this->bar_w/2), $y,($x+$this->bar_w/2), 0,($x-$this ->bar_w/2), 0);
//Las convertimos a coordenadas de la imagen
$r = $this->translatePoly($p);
//dibujamos el rectángulo
imagefilledpolygon($this->image, $r, sizeof($r)/2,$this->translateColor($this->bar_color));}
// Método calcRange – define el espacio para la gráfica
// su parámetro es la tabla de valores
function calcRange($series) {
//comenzamos en el inicio de las coordenadas polares
$this->_x_min = 0; $this->_y_min = 0;
$this->_x_max = 1; $this->_y_max = 1;
foreach($series as $x=>$y) {
//cambiamos el rango dependiendo del valor
if($x >= $this->_x_max) $this->_x_max = $x;
if($x < $this->_x_min) $this->_x_min = $x;
if($y >= $this->_y_max) $this->_y_max = $y;
if($y < $this->_y_min) $this->_y_min = $y;}
//definimos el ancho y la altura del diagrama
$this->_range_w = $this->_x_max-$this->_x_min;
$this->_range_h = $this->_y_max-$this->_y_min;}

// Método translatePoly – proyecta los puntos del espacio del diagrama
// al area de la imagen su parámetro es la tabla con los puntos x, y
// consecutivos
function translatePoly($p) {
$r = Array();
for($i=0; $i<sizeof($p); $i+=2) {
//convertimos los puntos consecutivamente
$r[] = $this->translateCoordX($p[$i]);
$r[] = $this->translateCoordY($p[$i+1]);}
return $r;}
// Métodos translateCoordX y translateCoordY – transforman las coordenadas
// del diagrama su parámetro es el valor x y y correspondientemente
// el método devuelve el valor de la coordenada para el área de la imagen
function translateCoordX($x) {
return round($this->margin_x+($this->width-2*$this->margin_x)*
($x-$this->_x_min)/$this->_range_w);}
function translateCoordY($y) {
return round($this->margin_y-($this->height-2*$this->margin_y)*
($y-$this->_y_max)/$this->_range_h);}
// Método translateColor – permite obtener el identificador del color
// su parámetro es la tabla de colores RGB
// el método devuelve el identificador del color
function translateColor($rgb = Array(255, 255, 255)) {
return imagecolorallocate($this->image, $rgb[0], $rgb[1], $rgb[2]);}}
?>
  #10 (permalink)  
Antiguo 21/10/2005, 09:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. faltó el código donde llamas a tu chart.php. Observa en el código fuente del código que llamas a chart.php (no de ese, sino del que lo llamas OJO) si ves algún mensaje de error (que bajo un tag <img ...> sólo verías una "X".

Otra cosa que puedes hacer para aberigüar el problema, llama a tu código chart.php desde el URL (http://www.nose.tal/chart.php) y quita la cabecera HTTP por el momento (header()) para observar cualquier mensaje de error que se pueda estar produciendo pero no ves.

PD: Para otra vez .. usa el botón "PHP" .. eso colorea el código, así se vé mejor.

Un saludo,
  #11 (permalink)  
Antiguo 21/10/2005, 10:47
 
Fecha de Ingreso: octubre-2005
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
Hola¡¡ llamo a chart.php asi:
Código PHP:
<img src"chart.php" caption="Caption" WIDTH"199" HEIGHT"128"
estoy viendo los errores..

willyneverdie
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




La zona horaria es GMT -6. Ahora son las 19:56.