Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/04/2011, 10:24
ZeThito
 
Fecha de Ingreso: septiembre-2010
Mensajes: 147
Antigüedad: 13 años, 7 meses
Puntos: 3
Calidad de Imagen PHP

Hola. Tengo una consulta sobre la calidad de imagen al redimensionar con PHP

Tengo una función en php que cambia el tamaño de una foto grande a una pequeña, pero se pierde la calidad de la imagen y se ve extraña.

Existe alguna solución para mantener la calidad de imagen al redimensionar con php?

Dejo mi página donde aparecen las imágenes:

http://www.publicalibre.cl

Dejo mi código:


Código PHP:
Ver original
  1. if (isset($_FILES['file'])){
  2.        
  3.         if($_FILES['file']['tmp_name']){
  4.             // Creamos la cadena aletoria
  5.             $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
  6.             $cad = "";
  7.             for($i=0;$i<12;$i++) {
  8.                 $cad .= substr($str,rand(0,62),1);
  9.             }
  10.             // Fin de la creacion de la cadena aletoria
  11.        
  12.             $tamano         =   $_FILES[ 'file' ][ 'size' ]; // Leemos el tamaño del fichero
  13.             $tama&#241;o_max        =   "3000000"; // Tamaño maximo permitido [3MB]
  14.        
  15.             if( $tamano < $tama&#241;o_max){ // Comprovamos el tamaño
  16.                 $destino    =   'uploads/tmp' ; // Carpeta donde se guardata
  17.                 $sep        =   explode('image/',$_FILES["file"]["type"]); // Separamos image/
  18.                 $tipo       =   $sep[1]; // Optenemos el tipo de imagen que es
  19.  
  20.                 if($tipo == "PNG" || $tipo == "png" || $tipo == "gif" || $tipo == "pjpeg" || $tipo == "bmp" || $tipo == "GIF" || $tipo == "JPG" || $tipo == "jpg" || $tipo == "JPEG" || $tipo == "jpeg"){// Si el tipo de imagen a subir es el mismo de los permitidos, segimos. Puedes agregar mas tipos de imagen
  21.                
  22.                     move_uploaded_file ( $_FILES [ 'file' ][ 'tmp_name' ], $destino . '/' .$cad.'.'.$tipo);  // Subimos el archivo
  23.                     $_SESSION['Imagen'] = $cad.'.'.$tipo;
  24.                 }else{
  25.                     // Si la extensión no es correcta
  26.                     echo "NOTA: Imagen con extensión no permitida.";
  27.                 }
  28.                            
  29.             }else{
  30.                 // Si supera el tamaño de permitido lo desimos
  31.                 echo "NOTA: El archivo supera el tamaño permitido.";          
  32.             }
  33.                    
  34.         }
  35.  
  36.     if(isset($_SESSION['Imagen'])){
  37.        
  38.         function redimensionar_jpeg($img_original, $img_nueva, $img_nueva_anchura, $img_nueva_altura, $img_nueva_calidad)
  39.         {
  40.             // Crear una imagen desde el original
  41.             $img = ImageCreateFromJPEG($img_original);
  42.             // Crear una imagen nueva
  43.             $thumb = imagecreatetruecolor($img_nueva_anchura,$img_nueva_altura);
  44.             // Redimensiona la imagen original copiandola en la imagen
  45.             ImageCopyResized($thumb,$img,0,0,0,0,$img_nueva_anchura,$img_nueva_altura,ImageSX($img),ImageSY($img));
  46.             // Guardar la nueva imagen redimensionada donde indicia $img_nueva
  47.             ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
  48.             ImageDestroy($img);
  49.         }
  50.  
  51.        
  52.         $origen="uploads/tmp/".$_SESSION['Imagen']."";
  53.         $destino="uploads/".$_SESSION['Imagen']."";
  54.         $destino_temporal=tempnam("uploads/tmp/","tmp");
  55.  
  56.         redimensionar_jpeg($origen, $destino_temporal, 200, 200, 200);
  57.  
  58.         // Guardamos la imagen
  59.         $fp=fopen($destino,"w");
  60.         fputs($fp,fread(fopen($destino_temporal,"r"),filesize($destino_temporal)));
  61.         fclose($fp);
  62.        
  63.         // Borramos la Imagen de Origen y la de Destino Temporal /tmp
  64.         if($destino_temporal){
  65.             unlink($origen);
  66.             unlink($destino_temporal);
  67.         }  
  68.     }
  69.    
  70.     }