1.- recibe unas imagenes elegidas mediante un formulario
2.-almacena las imagenes en un directorio del servidor
3.- genera el respectivo thumbnail de cada imagen para esto utiliza la direccion del directorio del servidor donde se almaceno la imagen original
4.-almacena los nombres de las imagenes originales y de los thumbnails en campos de tipo texto en la base de datos.
El script funciona perfectamente lo he probado en el servidor local de mi pc y en la web, el problema es que hasta ahora solo habia trabajado con imagenes de 640x480 como maximo, y si bien funciona con imagenes mas grandes el subir imagenes de mayor tamaño mediante el script tarda demasiado mas si aun si mediante el formulario se eligieron mas de una imagen y aparte trabajar con imagenes tan grandes en la web no es muy aconsejable.
Lo que quiero es saber como deberia modificar el script para que si mediante el formulario s elecciono imagenes que son mayores a 640x480, redimensione dicha inagen a 640x480 y almacene esta imagen redimensionada en el servidor sin subir la imagen original (la que es mayor a 640x480), una vez realizado esto podria continuar a partir del paso 3 del script.
la idea es que cualquier persona pueda actualizar la pagina sin que tenga que utilzar otros programas para redimensionar las imagenes antes de subirlas mediante el script.
Estos son los codigos con los que estoy trabajando
Este es parte del codigo del formulario para elegir las imagenes:
Código:
Este es el codigo del script que recibe los datos del formulario..... <input type=file name="images[]"> <br> <input type=file name="images[]"> <br> ..... <input type="submit" name="s1" value="Enviar"> </form>
Código:
el codigo de la funcion que genera los thumbnails es el siguiente por si es necesario solo se deben especificar el directorioinclude("redimensionar.php"); //script que contiene la funcion para generar los thumbnails $cont=1; if(isset($_POST[s1])) { if(!empty($_FILES[images][name][0])) { while(list($key,$value) = each($_FILES[images][name])) { if(!empty($value)) { //renombra la imagen $NewImageName = $t."_pic_".$value; //almacena la imagen en el directorio fotos copy($_FILES[images][tmp_name][$key], "../fotos/".$NewImageName); //almacena el nombre de la imagen $MyImages[] = $NewImageName; //ubicacion de la imagen original para usar en la funcion que genera el thumbnail $imagen= "../fotos/".$NewImageName; //nombre para el thumbnail para usar en la funcion que lo genera $nombre_imagen_asociada=$cont.$NewImageName; //llamada a la funcion que genera el thumbnail $redim=redimensionar_imagen($imagen, $nombre_imagen_asociada); almacena el nombre del thumbnail $MyThumbs[]=$nombre_imagen_asociada; $cont++; } } //una vez que se cierra el ciclo //se almacenan los nombres de todas las imagenes originales en una cadena //esta cadena quedaria mas o menos asi: foto1.jpg|foto2.jpg|foto3.jpg etc if(!empty($MyImages)) { $ImageStr = implode("|", $MyImages); } //se almacenan los nombres de los thumbnails de la misma forma que los nombres de las imagenes originales if(!empty($MyThumbs)) { $ThumbStr= implode("|" , $MyThumbs); } } //finalmente se almacenan en campos de tipo texto en la base de datos de esta forma $sql="Insert into tabla set image='$ImageStr ' , thumb='$ThumbStr' "; }
donde se almacenaran los thumbnails y las dimensiones de estos
Código:
Espero no haber sido muy confuso en mi explicacion y que puedan ayudarme function redimensionar_imagen($imagen, $nombre_imagen_asociada) { //indicamos el directorio donde se van a colgar las imágenes $directorio = "../thumbnails/" ; //establecemos los límites de ancho y alto $nuevo_ancho = 115 ; $nuevo_alto = 86 ; //Recojo información de la imágen $info_imagen = getimagesize($imagen); $alto = $info_imagen[1]; $ancho = $info_imagen[0]; $tipo_imagen = $info_imagen[2]; //Determino las nuevas medidas en función de los límites if($ancho > $nuevo_ancho OR $alto > $nuevo_alto) { if(($alto - $nuevo_alto) > ($ancho - $nuevo_ancho)) { $nuevo_ancho = round($ancho * $nuevo_alto / $alto,0) ; } else { $nuevo_alto = round($alto * $nuevo_ancho / $ancho,0); } } else //si la imagen es más pequeña que los límites la dejo igual. { $nuevo_alto = $alto; $nuevo_ancho = $ancho; } // dependiendo del tipo de imagen tengo que usar diferentes funciones switch ($tipo_imagen) { case 1: //si es gif ... $imagen_nueva = imagecreate($nuevo_ancho, $nuevo_alto); $imagen_vieja = imagecreatefromgif($imagen); //cambio de tamaño... imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto); if (!imagegif($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false; break; case 2: //si es jpeg ... $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto); $imagen_vieja = imagecreatefromjpeg($imagen); //cambio de tamaño... imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto); if (!imagejpeg($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false; break; case 3: //si es png ... $imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto); $imagen_vieja = imagecreatefrompng($imagen); //cambio de tamaño... imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto); if (!imagepng($imagen_nueva, $directorio . $nombre_imagen_asociada)) return false; break; } return true; //si todo ha ido bien devuelve true }