Creación de Thumbnails de imágenes con PHP
Para los que no estan familiarizados con el termino esto se refiere a previsualizaciones de menor tamaño de una imagen original lo cual se utiliza mucho para galerias, mostrando una copia de la imagen original pero de menor tamaño tanto en pixeles co
Para el ejemplo utilizare una como formato de imagen
el GIF, primero presentare el código y luego la explicación línea
por línea al igual que como hacerlo con diferentes formatos de imagen.
Supongo que el nombre del archivo es imagen.php
<?php //Una Creacion De Jorge Luis Martinez M //http://misCodigos.jlmnetwork.com/ /*Este Archivo Recibe Los Parametros $ruta, Que Es La Ruta Interna De La Imagen En El Servidor, Y Los Parametros $ancho y $alto Que Se Refiere Al Alto Y Ancho De La Previsualizacion.*/ $fuente = @imagecreatefromgif($ruta); $imgAncho = imagesx ($fuente); $imgAlto =imagesy($fuente); $imagen = ImageCreate($ancho,$alto); ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto); Header("Content-type: image/gif"); imageGif($imagen); ?>
Nota: La explicación la hago suponiendo
un conocimiento básico de php por parte del lector.
Lo primero
es recordar que este archivo recibe los parámetros $ruta
que es la ruta interna de la imagen en el servidor, entonces si el fichero
imagen.php se encuentra en:
http://www.servidor.com/cuenta/imagen.php
Y la imagen, en este caso supondremos el nombre “01.gif”,
se encuentra en:
http://www.servidor.com/cuenta/galeria/01.gif
A imagen.php sólo le pasaremos galeria/01.gif
como valor de ruta:
http://www.servidor.com/cuenta/imagen.php?ruta=galeria/01.gif
Pero esto no es todo, recordemos que recibe otros dos parámetros, los
cuales son alto y ancho,
estos no se refieren al alto y ancho de la imagen original, se refieren al alto
y ancho que queremos la previsualización (Thumbnail), entonces si queremos
que nos devuelva la imagen 01.gif, ubicada
en el directorio galeria y cuyo tamaño original
es de 400 píxeles de anchura y 300 píxeles de altura pero queremos
la previsualización de 200 píxeles de anchura y 150 píxeles
de altura tendriamos que llamarla de esta manera:
http://www.servidor.com/cuenta/imagen.php?ruta=galeria/01.gif&ancho=200&alto=150
Nota:
Obviamente si lo llamamos para presentarlo
como imagen dentro de un archivo al usuario(.html, .php, etc), lo llamamos mediante
el tag IMG:
<IMG SRC="http://www.servidor.com/cuenta/imagen.php?ruta=galeria/01.gif&ancho=200&alto=150">
Ahora que
ya sabemos como llamar a la imagen, vamos a ver como se hace la previsualización
(Thumbnail), como es que se crea desde una imagen más grande una imagen
más pequeña tanto en píxeles como en tamaño para su presentación
al usuario.
Primero creamos una copia de la imagen desde archivo, la igualamos a $fuente,
ya que allí quedará un identificador de tipo ENTERO
(INT) para dirigirnos a la imagen creada, esto es necesario ya que será
de esta imagen que haremos la previsualización (Thumbnail).
$fuente = @imagecreatefromgif($ruta);
Nota: Recuerde
que el @imagecreatefromgif() es para imagenes gif,
si quiere crear jpeg o png solamente cambie el gif:
@imagecreatefromjpeg($ruta) ó @imagecreatefrompng($ruta)
Ahora obtendremos la anchura y altura de la imagen original, esto es necesario
para poder hacer la copia de la imagen, para ello utilizamos las funciones
imageSX y imageSY,
que reciben como parametro un identificador de imagen (en este caso $fuente,
que es el identificador de la imagen original) y devuelven la anchura y altura
de la imagen respectivamente.
$imgAncho = imagesx ($fuente); $imgAlto =imagesy($fuente);
Ahora
creamos una imagen nueva en blanco con la anchura y altura que queremos para
la previsualización (Thumbnail) y que será la que se le devuelva al usuario
cuando se le llame, ya sea directamente en el browser o por medio de la etiqueta
IMG de html.
$imagen = ImageCreate($ancho,$alto);
Ahora
lo más importante, copiaremos la imagen original a la imagen nueva, lo
cual hará que al tener un menor tamaño (la imagen nueva), la copia de
que hacemos de la original se ajustara al tamaño de esta.
Utilizamos la funcion ImageCopyResized() la cual
sirve para copiar “partes” de una imagen a otra por medio de coordenadas, pero
en nuestro caso no necesitamos un pedazo, necesitamos copiar toda la imagen
en todo el espacio de la nueva imagen, por ello damos las coordenadas totales
de las imágenes.
Esto puede sonar un poco confuso, por eso es mejor que mires la documentacion
oficial en http://www.php.net/ para información sobre los parametros que recibe esta función.
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
Listo,
ya tenemos nuestra imagen, ahora debemos indicarle al navegador que vamos a
devolver una imagen de tipo gif, para ello enviamos la cabecera diciendo el
tipo de contenido que enviaremos al navegador.
Header("Content-type: image/gif");
Nota: Recuerde, si el formato es jpeg o png solamente cambie el gif:
image/jpeg ó image/png
Ahora
devolvemos la imagen directamente al browser(navegador) del usuario.
imageGif($imagen);
Nota: Recuerde, si el formato es jpeg o
png solamente cambie el gif: imageJpeg($imagen)
o imagePng($imagen)
Bien espero haya quedado claro,
pero vamos a ver otro aspecto, que tal si no queriamos devolver la imagen,
lo que queriamos era guardar la nueva imagen (Thumbnail) en el servidor, para
su uso posterior?…
Al ponerle
un segundo parametro al imageGif($imagen,”imagenPequena.gif”),
Lo lograremos, en este caso guardaria la imagen que acabamos de crear en el
servidor, especificamente en la misma carpeta con el nombre de “imagenPequena.gif”.
Esto puede
ser muy util, ya que si queremos crear thumbnails de todas las imagenes en
un directorio, podemos hacer un loop que lea los archivos del directorio,
y repita el proceso anterior(de crear imagen en blanco y copiar) y guarde
las nuevas imagenes para su uso posterior, realmente es una herramienta con
muchos usos.
Nota: Cabe recordar que su servidor tiene
que tener soporte para manipular imágenes, según el tipo que desee
utilizar, en caso de no tenerlo el servidor le dará un mensaje de error
como “Jpeg is no support…” dependiendo
del formato de imagen.
Suerte y hasta el próximo tutorial!
Excelente articulo y gracias por la infromacion
Esta muy interesante y se le puede dar mucha utilidad sobre todo en paginas de noticias. Felicitaciones por el articulo.
El código presentado por Jorge Luis Martínez es un buen tutorial para comenzar a trabajar con imágenes en PHP. La información del manual PHP es bastante escueta, este tipo de tutoriales facilitan mucho la vida
Una observación: para que todo funcione tu servidor DEBE tener configurado PHP con la librería GDLib. La manera más rápida de verificar si tienes instalada o no es usar una función de chequeo como la siguiente:
< ?php function check_GD() {
$check = true;
$check = $check && function_exists(
Muy interesante, pero ademas de necesitar la biblioteca GDlib, hay un detalle que vale la pena mencionar: El formato GIF ya no se puede utilizar !
Existe una patente sobre la creacion de imagenes Gif, y por eso la biblioteca GDlib (a la que pertenece la función por ejemplo ImageCopyResized) ha dejado de soportar el formato Gif. Utilizar el formato Png en vez de Gif, o Jpeg para las fotos.
Por otra parte, hay que mentionar que la reduccion no es de muy buena calidad. Es como hacerlo en Photoshop en el modo
Muy bueno compadre, gracias por la catedra, es lo que andaba buscando.
Efectivamente, la libreria GD dejo de soportar Gif desde la version 1.6. Y como supongo q querreis hacerlo con Jpeg, recomiendo usar imagecreatetruecolor en vez de imagecreate. Ademas no seria muy dificil modificar el codigo para hacer un thumbnail sobre unas dimensiones maximas pero sin modificar la proporcion ancho/altura de la imagen.
No lo puedo calificar, porque el sistema no me funciona. Nada nada.
Como hay que hacer para que funcione? no debo tener la libreria GDLib pero de donde la instalo muchas gracias
imagecreateif solo funciona en php 4.3.0 en adelante segun la pagina de zend
muy buen tutorial
Hombre, le cuento que estuvo excelente, porque aunque la primera parte la tenia clara, habia muerto en la segunda parte. En realidad me cayo de maravillas.
Genial.
Que buen tutorial, explicado paso a paso y sin enredos felicitaciones
a su creador. Me enseñó mucho. 😀
Excelente articulo, me ha venido muy bien, gracias
Buen articulo.
He hecho algunos avances, pero me es imposible usar la funcion header() como pone en el articulo. Me da el siguiente error:
Warning: Cannot modify header information – headers already sent by (output started at archivo.php:2) in
alguien sabe pq?? v_v
Hola, bueno el articulo, y listo para experimentar… alguna dudillas q tiene la gente…. en windows hay q tener la libreria php_gd.dll y modificar el php.ini, quitando el punto y coma de la linea:
extension=php_gd.dll
yo concretamente cuando reiniciaba el apache me decia q no encontraba el archivo asi q lo copié donde estaba el php.ini, usea en c:\windows y listo.
El archivo en concreto lo tenía en la carpta, c:\appserv\php\extensions (imagino q lo copiaría el AppServ v1.5.0, PHP+Apache+MySQL+PHPNUKE) y pesa 420 K no he buscado por ahí este archivo en concreto, pero si he visto una versión más antigua en esta url:
http://php.weblogs.com/php_gd
Bueno… en cuanto a lo del header es muy sencillo… hay q tener mucho mucho cuidado en no se mande nada al explorador antes q la cabecera, es decir ni espacios, ni retornos ni na de na…
Esto estaria bien:
________
< ? $variable=""; header(lqsea);
?>
Esto no
____________
< ? $variable=""; header(lqsea);
?>
por que dejo un renglon al principio visible por el explorador
esto tp:
_____________
cualquier cosa…
< ? $variable=""; header(lqsea);
?>
no vale tampoco:
______________
< ?
include(“loqseaquetengacualquiersalida.php”);
header();
?>
Esto si:
______________
< ?
include(“loqseaqueNOtengacualquiersalida.php”);
header();
?>
La linea __________ es el inicio del archivo….
Espero que sirva de algo, saludos.
hola bueno he probado el script y no hace nada, me explico no da ningun resultado, ni guarda la iamgen,ni lapresenta, ni da ningun mensaje de error, nada osea nada de nada
El articulo no lo he probado aún pero tiene muy buena pinta. Ya os contare!animarme!ANIMO!jeeje.AU
no lo he probado aún pero muchas gracias! ^^
Gracias sin duda me ayudaron mucho
Mi unico problema con este articulo es que despues de poner el codigo php para los Thumbnails no explicaste como hacer para poner varias imagenes en forma sencilla ni tampoco donde va el codigo donde dice el directorio de la imagen… bueno reugo que me contestes… y gracias
Creo que entendi tu explicacion.. tengo que probarla.. estaba buscando como insertar imagenes en una BD por ejemplo fotos de determinados usuarios juntos con sus datos para luego llamarlos en una especie de consulta en el que pusiera visualizar cada uno de mis usuarios registrados con su pequeña foto al lado de sus datos.. gracias por tu ayuda lo probare y luego te cuento si tienes alguna isea acerca de lo que te comente pls help me.
cree un archivo llamado imagen.php con el script y una carpeta llamada galeria con un archivo 01.gif dentro. Esto no rula. Seguro que es evidente para quien controle de php, pero los novatillos nos perdemos. Podrias poner mas clara su instalacion?
Excelente, felicitaciones!
me gustaria que pusieran un probador de codigos en esta web… intente e intente y fue inutil… ERROR
Warning: Cannot modify header information – headers already sent by (output started at /home/pctutor/public_html/b/1.php:4) in /home/pctutor/public_html/b/1.php on line 18
Fatal error: Call to undefined function: imagegif() in /home/pctutor/public_html/b/1.php on line 19
– – – –
si tienen una respuesta a [email protected]
muy bueno y muy bien explicado. Pero me gustaria saber si necesito compilar el apache con alguna opcion especial para usarlo mi dir es [email protected]
He instalado las librerias de GD2, y consiguo que la salida de la función sea algo así como un binario… ÿØÿàJFIFÿþ>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ÿÛC $.’ “,#(7),01444’9=82<.342ÿÛC 2!!22222222222222222222222222222222222222222222222222ÿÀ22”ÿÄ ÿĵ}!1AQa”q2?¡#.Pero me da un warning, Warning: Cannot modify header information – headers already sent by (output started at D:\Trabajos\php\img\thumbnail.php:9) in D:\Trabajos\php\img\thumbnail.php on line 72. Creo que debo cambiar algo en php.ini, que es?¿
Mi nombre es Ricardo, necesito un script que haga los siguiente:
Subir un jpg (de alta resoluciòn) a un servidor, crear un thumbnail de la imagen
que sería almacenada en una carpeta para el uso de una galerìa de imagenes.
al dar click sobre cualquier thumbnail se bajarìa su versiòn en alta resoluciòn.
o en sudefecto serìa enviado un e mail, con el thumbnail y un link a la imagen de alta resoluciòn.
si alguien conoce un script similar y su ubicaciòn estarìa muy agradecido.
mi e mail [email protected]
hola, estoy probando el script tal cual está:
[COLOR=DarkRed]< ?php $ruta=”http://localhost/foro/imagenes?ruta=imagenes/puma.jpg&ancho=197&alto=38′”;
$ancho=197;
$alto=38;
$fuente = @imagecreatefromjpeg($ruta);
$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);
$imagen = ImageCreate($ancho,$alto);
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
Header(“Content-type: image/jpg”);
imageJpeg($imagen);
?> [/COLOR]
luego intento visualizar una imagen en un archivo llamado prueba.php:
[COLOR=DarkRed]< ?php
include(“imagen.php”);
echo ““
?>[/COLOR]
lo que me sale es una página en blanco, sin nada, ningún mensaje.
Me gustaría saber si puedo utilizar este código con las imágenes que tengo en una base de datos, es decir hacer unthumbnails y al clikear sobre ellas que salgan con su tamaño original.
Una vez más, gracias por vuestra ayuda. 😉
Ana
Hola!
Mi Nombre es Eduardo.
Tengo unas imagenes en la base de datos MYSQL ¿Como utilizo la funcion thumbnails, para reducirles el tamaño? Teniendo en cuenta que estan en la base de datos las imagenes y no en un directorio. ¿O que otra funcion puedo utilizar ?
Espero que me puedan ayudar!!!
[email protected]
hola, lo del tamaño y todo funciona pero los colores se pierden en el thumb….¡porque sera?
Se pierden porque al utilizar ImageCreate() se utiliza una paleta distinta a la original. La solución es utilizar
imagecreatetruecolor()
en lugar de:
ImageCreate()
Salu2
No funciona de ninguna de las maneras, si alguien lo ha hecho funcionar, que postee aqui e código
A ver, os pongo mi codigo:
function thumbjpeg($imagen,$directorio,$ancho_tn,$alto_tn) //ancho_tn y alto_tn son el tamaño ke deseo para el thumbnail
{
$dir_thumb=$directorio; //ruta donde guardamos los thumbnails
$prefijo_thumb=”tn_”; //prefijo para el thumbnail
$camino_nombre=explode(“/”,$imagen); //por si imagen lleva una / delante
$nombre=end($camino_nombre);// Aquí tendremos el nombre de la imagen.
$anchura=$ancho_tn; //le doy el ancho ke pasé
$altura=$alto_tn; //le doy el alto
if (!file_exists($dir_thumb.$prefijo_thumb.$nombre)) //si no existe el thumbnail
{
$img = imagecreatefromjpeg($dir_thumb.$nombre) or die(“No se encuentra la imagen “.$dir_thumb.$nombre.”
\n”);
// miramos el tamaño de la imagen original…
$datos = getimagesize($dir_thumb.$nombre) or die(“Problemas con $dir_thumb$nombre
\n”);
$thumb = imagecreatetruecolor($anchura,$altura);
// con esto lo ke hago es kedarme con el lado mas pekeño, para ke al hacer el thumbnail no se deforme
if($datos[0]>$datos[1]) $tam=$datos[1];
else $tam=$datos[0];
imagecopyresampled ($thumb, $img, 0, 0,0,0, $anchura, $altura, $tam, $tam); //crea el thumbnail
// la salvamos con el nombre y en el lugar que nos interesa.
imagejpeg($thumb,$dir_thumb.$prefijo_thumb.$nombre);
}
}
Luego, la llamada a la función sería, por ejemplo:
thumbjpeg($Imagen,$directorio,176,138);
A mi me funciona. Vamos, no es NADA dificil hacerlo funcionar, lo dificil es para los tamaños y ke no se aplasten las imagenes. Y respecto a lo de “cómo ponerlo para ke cuando hagas clic se vea la imagen grande”… sólo es darle un poco al coco y sale solo 😉
Para dudas, gulphora(at)gmail(dot)com.
Saludos, gente.
Hace un tiempo escribí un tutorial para una galería de imágenes con php y gd: http://www.fedeblog.com.ar/83-Galeras-de-Imgenes-con-PHP.htm
Por si a alguien le sirve :S
Suerte
Fede
Hoigan yo no se mucho de programación, pero que no es menos complicado editar las imagees desde un editor de imagen, y ponerle subfijo como “_tb” y hacer que este sea la ruta “src”, digo por que mas o menos lleva el mismo tiempo y no re requiere ni un poquito de connocimiento de PHP.
el mensaje anterior es por que en mi galeria, ya uso un codigo scrip, por lo que no se si se conflictuarian los 2, comprendanme apenas si se usar el HTML los scrips los copeo de paginas especialisadas….
a mi no me funciona, creo un archivo con exactamente el codigo ese, y me suelta el siguente error:
“Fatal error: Call to undefined function: imagecreatefromjpeg() in D:\web\wwwroot\v2\trumb.php on line 6”
bueno si que cambie todos los gif por jpeg, eso si lo cambie, pero ahora no me sale el error me di cuenta de que en la funcion esa no tenia puesto @ y se la puse, pero ahora ya no muestra nada, nomuestra la imagen ni nada
¿? k sera? :pensando:
LA $ruta CAMBIALA POR UNA IMAGEN VALIDA!!!!
SALUDOS.
Hola a todos. ¿Qué se puede hacer para que al crear las miniaturas no se deformen las proporciones?
Muchas gracias
Por cierto, el artículo es excelente. Me funcionó a la primera
Buenas , primero que anda agradecer esta web su labor y a sus programadores por compartir tantos conocimientos 😉
Ahora me gustaría aportar mi granito de arena por si alguien se lia para redimensionar imágenes con este sistema.
La cosa es bien sencilla:
$ancho = X; (ancho al que queremos redimensionar)
$imgAncho = Y; (esta informacion es de la imagen subida)
$imgAlto = Z; (esta informacion es de la imagen subida)
$variablealto = $imgAlto*$ancho/$imgAncho;
Con esto obtenemos en $variablealto el alto proporcional al ancho aplicado a la redimensión ;).
Como ven es una regla de tres basica y bastante simple:
Si imgAncho equivale a ancho , imgAlto equivale a X.
imgAncho * X = imgAlto*ancho , entonces: imgAlto*ancho/imgAncho.
Un ejemplo del codigo completo podría ser:
$ruta = “img/”;
$titulo = “nombre_img”;
$ancho = 150;
$fuente = @imagecreatefromJpeg(“$ruta$titulo.jpg”);
$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);
$alto = $imgAlto*$ancho/$imgAncho;
$imagen = ImageCreateTrueColor($ancho,$alto);
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
Header(“Content-type: image/jpeg”);
imageJpeg($imagen,”img/p_$titulo.jpg”);
Saludos y espero que les sirva 😀
Para mostrar las imagenes hago lo siguiente:
De la bd saco la ruta de la imagen.
Al momento de darle el source a la imagen pongo la linea ” imagen.php?ruta=$img&ancho=100&alto=80&ext=$extn “
donde la unica cosa rara al tutorial es la variable ext donde le digo que extension usa la imagen, ya que no puedo controlar el tipo de imagenes que mis usuarios suben a la pagina por razones de practicidad ( para los usuarios claro esta, jejejejeje ).
En el script de imagen.php hago una serie de if para saber que función usaré. Casi todo marcha a la perfección, pero a veces hay imagenes que no se muestran y despues de refrescar la página para que sean mostradas me marca un horrible error de forbiden aunado a un error 404.
Alguno de uds sabra que es lo que pasa :s ?!!!!
Hola todos, que aconsejan, puse en unas paginas unos resizeimage aplicando un script ya hecho que utiliza todo lo conversado, lo que pasa es que cuando carga la pagina donde este el script, se toma la cpu del servidor y no la suelta hasta que termina de trabajar la imagen :
No creo que eso este bien. ??
Sera donde hago el resizeimage en cada carga ??
Mejor creo imagenes con los tamaños que necesite ??
salu2
nose que diablos pasa!! scripts de sheet!!! ninguno me funciona.. ya probe mil y ninguno… incluso este ya lo habia usado antes!! y si funcionaba!.. pero ahora nose que hice mal que no me sale nada!! solo un cuadrito de que la imagen no se encuentra
[SIZE=”4″][COLOR=”YellowGreen”]A mi si me funciono en mi pc como (localhost) pero a la hora de subirlo al servidor remoto no me aparecieron las imagenes[/COLOR][/SIZE]
[COLOR=”Red”]AYUUUUUUUUUDDDDDDDAAAAAAAA!!!!!!!!!!!![/COLOR]:'( :'(
chano necesito el codigo que hace que una imagen la introdusca y la misma se guarde en la base de datos con que este trabajando
Excelente articulo. Justo lo que estaba buscando. Gracias por compartir tus conocimientos
// http://inkahuana.iespana.es //
he probado el codigo y la verdad no encuentro la diferencia no veo ningun diferencia y eso q cuento con todas la librerias intaladas.
quien me ayuda
sensasional este tutorial, pero lo sigo al pie de la letra y no consigo que se muestre la foto, en mi caso la foto esta en jpeg. Alquien sabe por que pudiera ser?
Este código la verdad funciona pero hay q agregar ciertas cosas pero ademas las imagenes echas miniarutas se distorcionan no se si vala la pena trabajra por es lo mmismo coocar sale lo mismo q colocar todo es scrip. Todo a que que diga lo contrario q me lo demuetre q me equivoque y me de las pautas necesarias con el script y las imagenes de no ser asi seguiere convenncido q este codigo es una tonteria…
Marco no me funcionaba por unos problemas de novato.XDD no tenia bien configurado el php.ini. A continuacion expongo mi unico problema.
Al poner:
imagepng($thumb,”miniatura”.$nombre);
no me mustra la foto, sin embargo, al poner:
imagepng($thumb,”miniatura”);
si que me la muestra porque puede ser?
A continuacion os pongo lo que tengo hecho de codigo:
cho “
empecemos con la previsualizacion de las fotos
“;
INDEX.PHP
$cadena2 = “miniatura”;
$cadena =”mnt”;
$dir = opendir(“c:\FoxServ\www\fotos”);
while (($file = readdir($dir)) !== false)
{
if (($file !=”.”)&&($file !=”..”)&&($file!=”Thumbs.db”)&&($file!=”subida”)&&($file!=”upload.txt”)&&($file!=”lo q va rulando”)&&($file!=”index.php”)&&($file!=”redimensionar.php”)&&($file!=”subir.php”))
{
$esminiaturas = strncmp($file,$cadena2,9); /*devuelve 0 si las 2 cadenas son = */
/*comprueva si es una miniatura*/
$existeminiaturas = strncmp($file,$cadena,3); /*devuelve 0 si las 2 cadenas son = */
/*para evitar los archivos q ya tienen miniatura*/
if($esminiaturas==0)
{
echo “
“;
}else{
if($existeminiaturas!=0)
{
rename($file,”mnt”.$file);
/*echo filetype($file);*/
$imagenrenombrada=”mnt”.$file;
echo “
“;
}
}
}
}
closedir($dir);
?>
REDIMENSIONAR.PHP
< ?php $anchura=150;
$hmax=150;
$nombre=basename($_GET[‘imagen’]);
$datos = getimagesize($nombre);
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,”miniatura”.$nombre);} /*,”miniatura”.$nombre para guardarlas*/
if($datos[2]==2){header(“Content-type: image/jpeg”);imagejpeg($thumb,”miniatura”.$nombre);}
if($datos[2]==3){header(“Content-type: image/png”);imagepng($thumb,”miniatura”.$nombre); }
imagedestroy($thumb);
?>
Aun me queda hacer que reconzca las fotos como si estuvieran por categorias para tenerlas ordenadas. Y todo va bien menos lo dicho.
Mi problema seria con este codigo el de arriba no esta del todo bien se me olvido borrar “miniatura”.
imagepng($thumb,”miniatura”.$nombre);
no me mustra la foto, sin embargo, al poner:
imagepng($thumb,);
El codigo de las paginas index.php y redimensionar.php sigen igual, lo digo para evitar posibles confusiones.
Unregistered, ese error de headers podria deberse a q entes q realices el header se este imprimiendo algo… basta conq se imprima un espacio o alguna etiqueta para q el header falle… por ej: echo “h”; header(“Location:index.php”);
en ese codigo te botaria error por hacerese el header despues de lgo q se esta imprimiendo …
Alguien sabe como levantar con php la informacion que trae una imagen, puesta desde photoshop???
// http://www.urbeetorbe.com.ar //
ummm muy bueno gracias a el estoy haciendo mi galeria pero me costo un poco por q la queria con mas formatos si alguien la quiere aqui esta la modificacion
< ?php
/* imagen.php?ruta=a.gif&ancho=50&alto=50 */
if($ruta){
/* Imagen Gif */
if(eregi(“gif”, $ruta)){
$fuente = @imagecreatefromgif($ruta);
$imgAncho = imagesx($fuente);
$imgAlto =imagesy($fuente);
$imagen = imagecreatetruecolor($ancho,$alto);
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
Header(“Content-type: image/gif”);
imageGif($imagen);
imageDestroy($imagen);
}
/* Imagen Jpg */
elseif(eregi(“jpg”, $ruta)){
$fuente = @imagecreatefromjpeg($ruta);
$imgAncho = imagesx($fuente);
$imgAlto =imagesy($fuente);
$imagen = imagecreatetruecolor($ancho,$alto);
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
Header(“Content-type: image/jpeg”);
imagejpeg($imagen);
imageDestroy($imagen);
}
/* Imagen Png */
elseif(eregi(“png”, $ruta)){
$fuente = @imagecreatefrompng($ruta);
$imgAncho = imagesx($fuente);
$imgAlto =imagesy($fuente);
$imagen = imagecreatetruecolor($ancho,$alto);
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
Header(“Content-type: image/png”);
imagepng($imagen);
imageDestroy($imagen);
}
}
?>
por que me sale una pantlla en blanco que debo agregar miren mi codigo y reportenme al correo [email protected] les agradesco
< ?php
$ruta=”volante-Habitacionesgrande.JPG”;
$ancho=500;
$alto=200;
$fuente = @imagecreatefromjpeg($ruta);
echo $fuente;
$imgAncho = imagesx($fuente);
$imgAlto =imagesy($fuente);
$imagen = imagecreate($ancho,$alto);
imagecopyresized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
header(“content-type: image/jpeg”);
imagejpeg($imagen);
?>
simplemente genial, me parece una forma buena de explicar las cosas
// http://oskar.documentados.com //
Gracias a todos por sus aportes, por cierto yo habilite el GD2 y me funciono a la primera … gracias a todos !!! … bueno chequen este codigo q lo dejo otro webmaster por ahi :::
Por si E dudas… y puedo colaborar en algo mi email es : reguerin(at)gmail(dot)com
Bueno el codigo mencionado es ::::
A ver, os pongo mi codigo:
function thumbjpeg($imagen,$directorio,$ancho_tn,$alto_tn) //ancho_tn y alto_tn son el tamaño ke deseo para el thumbnail
{
$dir_thumb=$directorio; //ruta donde guardamos los thumbnails
$prefijo_thumb=”tn_”; //prefijo para el thumbnail
$camino_nombre=explode(“/”,$imagen); //por si imagen lleva una / delante
$nombre=end($camino_nombre);// Aquí tendremos el nombre de la imagen.
$anchura=$ancho_tn; //le doy el ancho ke pasé
$altura=$alto_tn; //le doy el alto
if (!file_exists($dir_thumb.$prefijo_thumb.$nombre)) //si no existe el thumbnail
{
$img = imagecreatefromjpeg($dir_thumb.$nombre) or die(“No se encuentra la imagen “.$dir_thumb.$nombre.”
\n”);
// miramos el tamaño de la imagen original…
$datos = getimagesize($dir_thumb.$nombre) or die(“Problemas con $dir_thumb$nombre
\n”);
$thumb = imagecreatetruecolor($anchura,$altura);
// con esto lo ke hago es kedarme con el lado mas pekeño, para ke al hacer el thumbnail no se deforme
if($datos[0]>$datos[1]) $tam=$datos[1];
else $tam=$datos[0];
imagecopyresampled ($thumb, $img, 0, 0,0,0, $anchura, $altura, $tam, $tam); //crea el thumbnail
// la salvamos con el nombre y en el lugar que nos interesa.
imagejpeg($thumb,$dir_thumb.$prefijo_thumb.$nombre );
}
}
Luego, la llamada a la función sería, por ejemplo:
thumbjpeg($Imagen,$directorio,176,138);
A mi me funciona. Vamos, no es NADA dificil hacerlo funcionar, lo dificil es para los tamaños y ke no se aplasten las imagenes. Y respecto a lo de “cómo ponerlo para ke cuando hagas clic se vea la imagen grande”… sólo es darle un poco al coco y sale solo 😉
Para dudas, gulphora(at)gmail(dot)com.
Saludos, gente.
//->>>>>>>>>>>>>>>>>
Hola, lo intento de mil maneras y no me va.Tengo una duda: la $ruta a que se refiere exactamente? Yo tengo la imagen(no la ruta) en una base de datos y a partir de ahi no puedo seguir .Alguien me aclara este punto?
Yo tengo un problema con estos en mi foro, postie en otro que era todo php y aparte de que no me trataron muy bien terminaron mandando mi post a la papelera, asi que no pierdo nada llevando mi duda de aqui para alla hasta que alguien con mas conocimiento me logre decir si tiene o no solucion, la cosa es facil, los enlaces como Thumbnail en mi foro no funcional, niguno uso los de image no eh probado con otros por que no conosco otro host de images pero con ese todos se cuelgan y queda parte del lenguaje y lo que seria el tumb colgado sin linkeado a la imagen original.
Aca tampoco logro poner un Thumbnail :'(
hola.. pues esta muy bien el tutorial .. pero tengo una duda.. para llamar a la imagen desde una base de mysql como kedaria el code..?.. e intentado y no e podido.. espero respuesta gracias..
magnifico!!!
Justo lo q estaba buscando para mostrar pequeñas fotos (que mania de llamarlo en ingles) una pasada tio!!!
No se cuando se realizacion de la publicacion, pero lo interesante es que yo tengo una subida de imagenes en base de datos, la cuestion es la siguiente, como lo hago en plan a base de datos MySQL. Esa es la miga de todo ^^, si sabeis el como no dudeis en mandarmelo a mi correo electronico, gracias, aun asi el articulo es interesante, salu2. dew
Correo Electronico: gachunano17(t)gmail.com
Este codigo funciona perfectamente lo he adaptado segun el escript del auto pero no conservaba el Alfa de la imagen y aparecia con mucho brillo asi que lo he adaptado controlando el alfa original de la imagen.
La forma del enlace es el siguiente:
Esta es mi pequeña aportacion a ese script.
un saludo.
Pedro
< ?php
/*Este Archivo Recibe Los Parametros $ruta, Que Es La Ruta Interna De La Imagen En El Servidor,
Y Los Parametros $ancho y $alto Que Se Refiere Al Alto Y Ancho De La Previsualizacion.*/
$F_ancho = $_GET[“ancho”];
$F_alto = $_GET[“alto”];
$fuente = @ImagecreatefromJpeg($_GET[“ruta”]);
$imagen = Imagecreatetruecolor($F_ancho, $F_alto); // crea el recurso gd para la salida
// desactivo el procesamiento automatico de alpha
Imagealphablending($imagen, false);
// hago que el alpha original se grabe en el archivo destino
Imagesavealpha($imagen, true);
Imagecopyresampled($imagen, $fuente, 0, 0, 0, 0, $F_ancho, $F_alto, ImageSX ($fuente),imagesy($fuente)); // redimensiona
header(“Content-type: image/jpeg”);
imagejpeg($imagen);
?>
Yo uso simplemente esta linea como salida HTML para crear el thumbnail de una imagen usando el tag “
Saludos,
La pega es que si las imágenes tienen una resolución de 1600×1200 y pesan 1MB cada una y muestras 3 o 4 reducidas …. lo que se reduce es el tamaño, pero no el peso y a la hora de cargarlas en el navegador el que se espera se puede morir de viejo.
Wow! que buen artiulo. Me sirvio mucho. Gracias.
G.B.T
tus tutoriales son una mierda por que desglosas demasiado los codigos y lo que haces es confundir a los usuarios que mierda de pagina es esta
Necesito un album en php, para modificarlo, que tenga la opcion de subir fotos
Instale el script y mefunciono, pero no distingo cual es la diferencia entre utilizar esto y poner las imagenes con
muy malo
me parece que es un buen aporte por parte del compañero buen tutoríal.
Gracias!!
La verdad, este script no ayuda en nada a quienes no sabemos nada. Y la verdad es que es un script muy escueto para quienes ya saben algo. Honestamente no entiendo a quienes se toman el tiempo para hacer un tutorial “por la mitad”. O lo hacen completo ó mejor no hacen nada. Dificultan encontrar scripts y tutoriales realmente útiles.
La verdad que hace mucho estoy buscando algo para hacer thumbails es ASP y desde que descubri que el servidor con el que trabajo hay PHP se me iso cuestion de minutos. Desdeya que gracias a la fantastca explicacion paso a paso.
Muchas Gracias
“La verdad, este script no ayuda en nada a quienes no sabemos nada.”
Si eres imbécil no es culpa del autor de la página. La página es útil para los que se molestan en estudiar y no esperan que se lo den todo mascadito como oligofrénicos en sanatorio.
interensante aun no lo pruebo pero me sirvio tus comentarios para recrear mis dudas en respecto a una programacion que estado haciendo
hola a todos los interesados en ganar $$ quieres tener tu propio sueldo? sin jefes mandones? sin precion? pero con un ambiente agradable y a cualqueri hora escribeme a [email protected] y sabras como ..!!!
Como hago si quiero dar de alta noticias con imagenes, pero aveces la nota no lleva imagen, como puedo hacer para decirle que aveces ponga la imagen y aveces no?
Buerno!!!!
muy bueno el tutorial
hola, ya logre redimensionar imagenes, pero tambien necesito redimensionar imagenes GIF animadas y no lo he logrado, alguna idea?
Muy buen tutorial, gracias
Es Script es muy bueno si funciona utilice imagecreatetruecolor, pero tengo un problema, despues de subir la imagen redimensionda se agregar una linea negra muy delgada en la parte inferior de la imagen, alguien puede ayudarme para que no suceda, adjunto mi codigo:
//SUBE LA IMAGEN DESDE fullsize a midsize
$ruta=”Imagenes/productos/fullsize/”;
$ruta2=”Imagenes/productos/midsize/”;
$titulo = $nombre_real;
$ancho = 240;
$fuente = @imagecreatefromjpeg(“$ruta$titulo”);
$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);
$alto = $imgAlto*$ancho/$imgAncho;
$imagen = imagecreatetruecolor($ancho,$alto);
imagecopyresized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
header(“Content-type: image/jpeg”);
imagejpeg($imagen,$ruta2.$titulo,80);
che, me encantaria que en vez de firmar veinte mil veces escriban cuando sepan algo de enserio y puedan mostrarlo con algun ejemplo en algun servidor gratuito y si habia que cargar una libreria muestren como, si se fijan a la mayoria de los que firmaron no les funciona el ejemplo. Es lap rimera vez que entro aca y bueno voy a ver si puedo aportar algo.
De todas maneras esta bueno que se interesen. Yo probe 2 de los codigos que “funcionaban perfecto” y no anduvieron.
Hola, la verdad es que soy novato en php e intente probar el codigo pero no me sale absolutamente nada… incluso agregue la libreria que dice y configure el php.ini pero nadaaaaaaaaa
por favor ayudenme…
Hola:
He sacado mi conclusion; Que digo mi conclusion mas bien la conclusion de un grupo de amigos … la verdad no funciona de nadie haber si ponen el codigo pero 100% Okey… Gracias se les agradesco anticipadamente: Atte: tu amigo ROKA
la verdad este tutorial es muy bueno pero les recomiendo que vean el codigo y sobre todo si trabajan en php5 no olviden los $_pos $_gets trabajen mucho las variables sino los les carga … cualquier cosa me avisan o me escriben su ingeniero de siempre
Harold Carvallo
Hice tal cual indica el tutorial y no me funciona. Cargue el archivo imagen.php en mi pagina y no funciona. Que pasa? Olvide algo?
hola! y si quisiera guardar la imagen en una carpeta como seria la funcion?
gracias y saludops
hola como estas?…por fa necesito una ayudita en responder mi interrogante…porq no puedo hacer thumbnails de imagenes que superan los 1024 px?….tengo un juego de funciones que solo me sirven para imagenes de menor tamaño..pero supongo que la función que presentas en este tutorial debe de servir para imagenes de tamaño superior a 1024 y no me funciona….plis ayudame..
hola…espero estes bien..por fa necesito una a ayudita en reponder mi interrogante…¿por q no puedo hacer thumbnails de imagenes con tamaño superior a 1024 px?..he probado con distintas funciones que deberian permitirme hacerlas y no he podido..por fa ayudame…:-(
Adapte el codigo para hacer miniaturas proporcionales al vuelo con php de archivos .jpg .gif y .png automaticamente ademas de rellenar las miniaturas con color blanco
($imgAncho/$imgAlto)){
$ancho2=($imgAncho/$imgAlto)*$alto;
$espacioW=($ancho-$ancho2)/2;
$espacioH=0;
$ancho=$ancho2;
}else{
$alto2=($imgAlto/$imgAncho)*$ancho;
$espacioW=0;
$espacioH=($alto-$alto2)/2;
$alto=$alto2;
}
//————————————————————————–
//imagecopyresized($imagen,$fuente,$espacioW,$espacioH,0,0,$ancho,$alto,$imgAncho,$imgAlto);
imagecopyresampled($imagen,$fuente,$espacioW,$espacioH,0,0,$ancho,$alto,$imgAncho,$imgAlto);
if($ext==”gif”){
header(“Content-type: image/gif”);
imagegif($imagen,””,90);
}else if($ext==”jpg”){
header(“Content-type: image/jpeg”);
imagejpeg($imagen,””,90);
}else if($ext==”png”){
header(“Content-type: image/png”);
imagepng($imagen,””,90);
}else{
header(“HTTP/1.1 404 Not Found”);
}
?>
lo unico q no me funciona es cuando llamo a una imagen externa
ejmp:
http://localhost/thumb_img.php?ancho=95&alto=150&ruta=http://www.google.cl/logos/chagall.gif
Buenísimoooo..!!! Es exactamente lo que necesitaba, y funciona perfecto! =D Gracias Gracias Gracias!!
Pd: Veo que algunos, se quejan… Por que no leen? jeje lo dice muy claro el autor:
“Nota: La explicación la hago suponiendo
un conocimiento básico de php por parte del lector”. Y las explicaciones del mismo son muy claras. No se puede pedir más.
No esperarán que además del script, el autor les enseñe php, instale el script, lo haga funcionar en el servidor y les sirva un té? je…
A mí el script, me funcionó muy bien (y mi conocimiento de php es básico)
Tuve que cambiar un par de cosas, porque así como está no funciona en mi versión de php, pero fueron cambios mínimos, que no eran problemas del script, sino de compatibilidad.
GRACIAS! =D
Dejo el código tal cual me sirve a mí, con algunos agregados:
– los $_GET porque sino, no lo toma mi versión de php, (creo que es 4.4)
– la opción para mantener la proporción original (ej, si solo quiero pasarle el ancho, y que tome el alto proporcionalmente, solo le paso el parámetro &ancho por GET… y si quiero forzar la proporción, paso los dos)
A mí me sirve… =)
$ruta= $_GET[‘ruta’];
$fuente = @imagecreatefromjpeg($ruta);
$imgAncho = imagesx ($fuente);
$imgAlto =imagesy($fuente);
if(($_GET[‘ancho’])&&($_GET[‘alto’])){
$ancho= $_GET[‘ancho’];
$alto= $_GET[‘alto’];
}else if($_GET[‘ancho’]){
$ancho= $_GET[‘ancho’];
$alto= ($imgAlto/$imgAncho)*$ancho;
}else if($_GET[‘alto’]){
$alto= $_GET[‘alto’];
$ancho= ($imgAncho/$imgAlto)*$alto;
}
$imagen = imagecreatetruecolor($ancho,$alto);
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$alto,$imgAncho,$imgAlto);
Header(“Content-type: image/jpeg”);
imageJpeg($imagen);
@imagedestroy($dst_img);
Pd.:
lo de:
@imagedestroy($dst_img);
está de mas! Se me escapó, NO va acá.. jejeje
(en todo caso, sí iría @imagedestroy($imagen); pero solo si es para imagenes temporales y las quiero borrar despues de usarlas) je
Oye man pero eso esta enchino creo k eso no se puede hacer sin la libreria GD o que.
esta super bien su ejemplo, estoy aprendiendo php y le entendi muy bie gracias
hola amigo esta muy bueno este post, la verdad me ayudo mucho, pero me gustaria que me respondieras al mail como mejorar la calidad de las imagenes, por que la verdad el las saca como quiero pero con una calidad muy baja.
Es recomendable si se usan imágenes de mayor calidad como las que pueden ofrecer los formatos “jpg y png” usar la función “imagecreatetruecolor” de lo contrario se podría experimentar una pérdida importante del color con respecto a la imágen original. Por lo demás el ejemplo es claro y sencillo.
Un saludo
no me sirvio
poner ejemplo
Hola muy buen articulo. tengo una pregunta estoy haciendo una aplicacion con pageflip dinamico en flash que carga imagenes desde un archivo xml que genero con php cuando los usuarios suben sus imagenes y hago la conversion de tamaño origina a tamaño de uso de mi pageflip que es 500*600 pero tengo que hacer 2 pasos uno es subir el archivo en el tamaño original y de alli creo los thumb y la resolucion no es que sea muy buena y lastimosamente son imagenes que contienen texto de lectura la cual con una funcion zoom no se ve muy bien quisiera saber si esta forma de ver los thumb me serviria para la carga con flash y si se mejoraria la calidad del thumb? cualquier comentario a mi correo por favor [email protected]
gracias de antemano
bacan este foro
Skywalker!! GRANDE!!! no me funcaban las imágenes, tu aporte fué definitor
Muchas gracias!!!
Hola Alejandro, necesito comunicarme con vos y no se como. Mi correo es [email protected] espero tu respuesta.
Atte.
Iván
muchas gracias por el artículo, la información de como jalar el archivo me sacó del atoyadero!!!
mil gracias!!!!
Qué tal.
El script me devuelve la misma dirección de la página, o si lo llamo con un IMG SRC no me devuelva nada.
No es el primer script que pruebo y me hace eso. ¿Alguien sabe lo que pasa?
Hola te escribo porque tengo un problema con subir imagenes con php
es el siguiente:
quiero hacer un sitio donde los usuarios(los que entren a mi sitio) puedan subir fotos a mi sitio y que estas se vean en el sitio en una página dedicada a esto, poder borrarlas y hacer fotos en miniatura.
Espero que haya sido claro, desde ya muchas gracias
espero me contestes, un abrazo
muy bueno!!, la pregunta es si sopotra otro tipo de archivos ó solo es .gif?
Hola en una pagina web hay una seccion que muestra los thumnail con una pequeña sombra para las imagenes que no se estan mostrando y la imagen que si se muestra en el thumbnail no aparece esa sombra por ejemplo en esta web: http://www.varelalamar.com/index.php/media/
como pueden ver en esa seccion los thumbnail aparecen con una pequeña sombra para las imagenes que no se estan mostrando como puedo yo quitar esa sombra y dejar que todas los thumbnail se vean por igual.
Saludos
Muy buen tuto… funciona de mil maravillas!!!!