Comunidad PHPeros

Lenguajes => PHP => Tutoriales PHP => Mensaje iniciado por: CarlosRdrz en 17 de Octubre de 2006, 21:11:56 pm

Título: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: CarlosRdrz en 17 de Octubre de 2006, 21:11:56 pm
Bueno antes que nada, este codigo se utiliza para REDIMENSIONAR una imagen a el tamaño que nosotros deseamos.
Este sistema usa la libreria GD de PHP, asi que necesitas tenerla instalada para que funcione el script
OJO : Este sistema no crea imagenes redimensionadas, sino que las redimensionas y las guarda en la memoria de tal forma que no ocupa extra de espacio.

Vamos con el codigo:
Redimensionar.php
<?php
$nombre=basename($_GET['imagen']);
$datos = getimagesize($nombre);

if(!$_GET[anchura]) {
$anchura=500;
} else {
$anchura = $_GET[anchura];
}
if(!$_GET[hmax]) {
$hmax=375;
} else {
$hmax = $_GET[hmax];
}

if($datos[0] < $anchura) {
$anchura = $datos[0];
}

if($datos[1] < $hmax) {
$hmax = $datos[1];
}
 
if($datos[2]==1){$img = @imagecreatefromgif($nombre);}
if($datos[2]==2){$img = @imagecreatefromjpeg($nombre);}
if($datos[2]==3){$img = @imagecreatefrompng($nombre);}
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
$thumb = imagecreatetruecolor($anchura,$altura);
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
if($datos[2]==1){header("Content-type: image/gif"); imagegif($thumb);}
if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);}
if($datos[2]==3){header("Content-type: image/png");imagepng($thumb); }
imagedestroy($thumb);
?>

Este es un codigo un poquillo complicadete... a decir verdad es muy complicado... voy a intentar explicarlo pero no se si lo are bien xD

$nombre=basename($_GET['imagen']);
$datos = getimagesize($nombre);
Sacamos el nombre base del archivo
El nombre base de un archivo es el nombre en si, esa funcion lo que haces es que si tu pones:
?imagen=imagenes/mialbum/mifoto.jpg
Solo seleccionara "mifoto.jpg" para sacar el nombre de la imagen
Y Ademas calcura el peso de la imagen, devolviendo el ancho y alto de esta imagen y el tipo de archivo que es.
Creando una "array"
Asi pues, la variable $datos es una array, y estos son sus indices:
$datos[0] -> Contiene el ancho de la imagen
$datos[1] -> Contiene la altura de la imgen
$datos[2] -> Indica el tipo de imagen (1 = GIF, 2 = JPG, 3 = PNG...)
$datos[3] -> Texto con que contiene: "height="---" width="---"" para usarlo directamente en una etiqueta Img de html

if(!$_GET[anchura]) {
$anchura=500;
} else {
$anchura = $_GET[anchura];
}
if(!$_GET[hmax]) {
$hmax=375;
} else {
$hmax = $_GET[hmax];
}

if($datos[0] < $anchura) {
$anchura = $datos[0];
}

if($datos[1] < $hmax) {
$hmax = $datos[1];
}
Traducido al español bonito:
Si no encuentra "anchura" con la global $_GET entonces añadimos una anchura por defecto, que es 500
Si no encuentra "hmax" (alto) con la global $_GET entonces añadimos una altura por defecto, que es 375

Si la anchura es menor que la anchura a la que queremos reducirla, la variable $anchura pasa a contener la anchura real de la imagen
Si la altura es menor que la altura a la que queremos reducir la imagen, la variable $hmax pasa a contener la altura real de la imagen

if($datos[2]==1){$img = @imagecreatefromgif($nombre);}
if($datos[2]==2){$img = @imagecreatefromjpeg($nombre);}
if($datos[2]==3){$img = @imagecreatefrompng($nombre);}
Si el tipo de imagen es GIF (1) => $img contendra @imagecreatefromgif($nombre)
Si el tipo de imagen es JPEG (2) => $img contendra @imagecreatefromjpeg($nombre)
Si el tipo de imagen es PNG (3) =>  $img contendra @imagecreatefrompng($nombre)
La funcion "imagecreatefrom***" sirve para crear una imagen nueva desde un archivo o una URL (en este caso un archivo)

$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
Simples calculos matematicos
$ratio es igual a la anchura dividido por la anchura que queremos que tenga la imagen
$altura es igual a altura dividido entre $ratio

if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
$thumb = imagecreatetruecolor($anchura,$altura);
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
if($datos[2]==1){header("Content-type: image/gif"); imagegif($thumb);}
if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);}
if($datos[2]==3){header("Content-type: image/png");imagepng($thumb); }
Mas calculos para determinar anchura y altura.
Crear imagen en color con la altura que queremos y la anchura que queremos
Y copiamos el contenido de nuestra imagen que queremos redimensionar, al archivo que hemos creado en la variable ($thumb)
Luego enviamos la imagen y lo mostramos con headers y todo xD.

La verdad es que es un codigo dificil de explicar y lo he hecho como he podido, porque ni yo lo entiendo del todo, bueno, vamos con el proceso practico.

Como usar el script redimensionar.php
[/b][/size]

Tenemos que tener en una carpeta lo siguiente:
- Imagen que queremos reducir
- Redimensionar.php
- Crear un nuevo archivo

Vamos con ese archivo.
Prueba.php
<?php
$img = ""; // NOMBRE DE LA IMAGEN A REDUCIR
echo '<img src="redimensionar.php?imagen='.$img.'&anchura=ESCRIBIR AQUI EL ANCHO&hmax=ESCRIBIR AQUI LA ALTURA">';
?>

Eso es todo, si tienen dudas de este magnifico script solo pregunten y intentare resolverlo.
Saludos!!
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: Raken en 17 de Octubre de 2006, 21:17:55 pm
TLX aquí no importamos códigos externos. Los hacemos entre todos y respondemos a las dudas del que quiere aprender.  ;)
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: sagitari en 17 de Octubre de 2006, 21:20:26 pm
@raken;
explica los códigos, y eso, se agradece.


@TLX;
Esta librería verdad que también se podría usar para un código de seguridad para tipear para saber si el user es un user o una máquina?
sabes, lo típico que sale una imagen y dicen, teclea el código que visualice ...

10 ! :)
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: CarlosRdrz en 17 de Octubre de 2006, 21:22:53 pm
Sip, la libreria GD tambien se utiliza para lo que tu dices :P

@Raken:
Segun descripcion de "Codigos PHP & Mysql":
En este foro encontrarás explicaciones de codigos programados en PHP con explicaciones detalladas.

Tengo mi codigo.
Esta en Php
Lo he explicado
¿Cual es el problema? O.o

Que yo sepa para lo que tu dices esta el foro Dudas PHP & Mysql
Para ayudar a la gente a resolver sus dudas :S

Pero en fin, si molesta lo quito.
0 Problems XD

Salu2!
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: naveda en 17 de Octubre de 2006, 22:11:36 pm
Me parece que es el foro correcto, y un post que sigue las normas... ;)

Ma gusta tu codigo :P Felicidades
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: Pc-Admin en 17 de Octubre de 2006, 22:22:38 pm
Esta wapo, buen codigo :):)
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: Raken en 18 de Octubre de 2006, 00:01:20 am
Okkk no he dicho nada. Te aseguro que cuando escribí eso NO lo ví explicado.  ;)
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: -RiPeRcOp- en 24 de Octubre de 2006, 17:17:18 pm
si es verdad esta wapa la aportacion, ahora yo queria utilizar eso, para hacer como un fotolog, no se si conocen lo q es, aqui les dejo el link www.foto.terra.com.ar/gonzalo_gabriel_2006 (http://www.foto.terra.com.ar/gonzalo_gabriel_2006)
Pues yo queria hacer algo parecido a eso, utiliza calculo base de datos, $_GET seguramente, y almacenamiento de fotos en el hosting si no me equivoco
ademas tiene un servicio de comentarios q aparece por fotos
q sucede, ese servicio esta limitado en 2 razones

entonces yo queria saber como hago para q yo suba la foto por un sector, un pagina especial para eso, q aparesca en el index, y luego
al postear otra foto esa pase a ser la segundo foto y q aparesca como alli en el link.

Desde ya muchas gracias
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: CarlosRdrz en 01 de Noviembre de 2006, 11:16:01 am
No entiendo muy bien lo que quieres decir

Pero yo tambien uso ese script para un fotoblog, es muy util, puedes visitar mi fotoblog en:
http://85.136.60.227/tibia/tfb/

Lo suelo meter online con el xampp hasta que lo acabe, y es solo para usuarios de tibia, pero si quieres testearlo metete con mi account:

Mata-Zanoz
----

Salu2!!
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: Krosty en 13 de Diciembre de 2006, 23:38:07 pm
sorry por revivir el post pero, no se puede hacer esto sin la necesidad de lso gets?
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: CarlosRdrz en 14 de Diciembre de 2006, 22:16:37 pm
Claro que si, pero no crees que es mejor con los gets? hace todo mucho mas dinamico!
Saludos
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: Krosty en 14 de Diciembre de 2006, 23:15:37 pm
si, pero para lo que yo la ocupo no :P ... eh estado tratando de entenderlo para modificarlo :S pero no se :P
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: CarlosRdrz en 15 de Diciembre de 2006, 19:20:37 pm
Facil, cambia esto:

$nombre=basename($_GET['imagen']);
$datos = getimagesize($nombre);

if(!$_GET[anchura]) {
$anchura=500;
} else {
$anchura = $_GET[anchura];
}
if(!$_GET[hmax]) {
$hmax=375;
} else {
$hmax = $_GET[hmax];
}

Por esto:

$nombre = ""; //El nombre de tu imagen
$datos = getimagesize($nombre);

$anchura = ; // Tu anchura aqui sin comillas (")
$hmax = ; // Tu altura aqui sin comillas (")


Saludos!
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: Krosty en 15 de Diciembre de 2006, 22:18:56 pm
ok, ya se como mushas gracias, no me habia puesto a verlo detenidamente
Título: Re: Usando la libreria GD de Php // Saquemos provecho a las imagenes!!
Publicado por: Dj-Celta en 19 de Diciembre de 2006, 15:23:25 pm
sorry por irme por las ramas pero q es tibia?