Ver Mensaje Individual
  #15 (permalink)  
Antiguo 26/01/2017, 01:58
rbczgz
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Respuesta: Interfaz gráfica para redimensionar imagen

Hola de nuevo,

Bueno, pues después de muchas pruebas e intentos, debo decir que no lo he conseguido.

No he conseguido recortar la imagen antes de subirla, no tengo ni idea de cómo presentarla en pantalla para poder recortarla y tampoco he podido recortar la imagen después de subirla porque no he conseguido que me aparezca el dichoso marco del croper.

He necesitado implementar una subida de archivos en un proyecto y me habría gustado hacerlo con este sistema, pero visto lo visto, lo he tenido que hacer "a las bravas" y redimensionar la imagen a un tamaño fijo.

La función que he creado, tomando ideas de un sitio y otro, es esta:

Código PHP:
Ver original
  1. function SubirRedimensionarArchivos($campo_archivo, $ruta, $carpeta, $size, $permitidos, $nombre_archivo, $altura = 100, $anchura = 75, $calidad = 90) {
  2. // Función para subir y redimensionar archivos mediante PHP
  3. // Autor: Rubén Bitrián (http://www.cybernegocios.com)
  4. // USO: SubirArchivos($campo_archivo, $ruta, $size, $permitidos, $nombre_archivo, $altura, $anchura, $calidad);
  5. // @param $campo_archivo = $_FILES['nombre_campo'];
  6. // @param $ruta = "ruta absoluta de subida del archivo";
  7. // @param $carpeta = "ruta de subida del archivo relativa a la raiz";
  8. // @param $size = "tamaño máximo permitido en bytes"
  9. // @param $permitidos = array(array con los tipos de archivos permitidos); (http://www.freeformatter.com/mime-types-list.html#mime-types-list)
  10. // @param $nombre_archivo = "nombre del archivo a guardar"
  11. // @param $nombre_archivo = "nombre del archivo a guardar"
  12. // @param $altura = "altura máxima de la imagen, opcional, por defecto 100px"
  13. // @param $anchura = "anchura máxima de la imagen, opcional, por defecto 75px"
  14. // @param $calidad = "calidad en la compresión de la imagen, opcional, por defecto 90px"
  15. // @return: el error si lo hay o la ruta del archivo relativa a la raíz si ha ido todo bien
  16.  
  17.    // Obtener el tipo MIME del archivo enviado por el usuario
  18.    $finfo = new finfo(FILEINFO_MIME_TYPE);
  19.    $mime_usuario = $finfo->file($campo_archivo['tmp_name']);
  20.    $campo_archivo_tmp = $campo_archivo['tmp_name'];
  21.  
  22.     // Contrastar los tipos MIME
  23.     $permitidos = in_array($mime_usuario, $permitidos);  // Devolverá true o false
  24.  
  25.     if($permitidos == FALSE) {
  26.       // Si el archivo no está en la lista de permitidos, devolvemos error.
  27.       return 'Error: El archivo enviado no se corresponde a un tipo permitido';
  28.     }
  29.  
  30.     // Comprobar que el tamaño no excede el permitido
  31.     if ( $campo_archivo['size'] > $size ) {
  32.       return 'Error: El archivo enviado es mayor de lo permitido';
  33.     }
  34.  
  35.     // Si el archivo existe en la ruta, devolvemos error.
  36.     if ( file_exists($ruta.$nombre_archivo) == TRUE ) {
  37.       return 'Error: El archivo ya existe.';
  38.     }
  39.  
  40.          switch($mime_usuario) {
  41.             case 'image/jpeg': $img = ImageCreateFromJPEG($campo_archivo_tmp); break;
  42.             case 'image/png': $img = ImageCreateFromPNG($campo_archivo_tmp); break;
  43.             case 'image/gif': $img = ImageCreateFromGIF($campo_archivo_tmp); break;
  44.             case 'image/vnd.wap.wbmp': $img = ImageCreateFromWBMP($campo_archivo_tmp); break;
  45.             default: $img = ImageCreateFromJPEG($campo_archivo_tmp); break;
  46.          }
  47.  
  48.    if(!empty($img)) {
  49.       $new_w_R = ImageSX($img);
  50.       $new_h_R = ImageSY($img);
  51.       //$img_nueva_altura = 50;
  52.       // se calcula la relación alto/ancho
  53.       $aspect_ratio = $new_h_R/$new_w_R;
  54.       $aspect_ratio2 = $new_w_R/$new_h_R;
  55.          if ($new_w_R >= $new_h_R){
  56.             // se ajusta al nuevo tamaño
  57.             $altura = abs($anchura * $aspect_ratio);
  58.          } else {
  59.             $anchura = abs($altura * $aspect_ratio2);
  60.          }
  61.      
  62.       // crear imagen nueva
  63.       $thumb = ImageCreateTrueColor($anchura,$altura);
  64.       // redimensionar imagen original copiándola en la imagen. La imagen se reajustará al nuevo tamaño
  65.       ImageCopyResampled( $thumb, $img, 0, 0, 0, 0, $anchura, $altura, ImageSX($img), ImageSY($img) );
  66.       // guardar la imagen redimensionada donde indica $img_nueva
  67.       ImageJPEG($thumb,$campo_archivo_tmp,$calidad);
  68.    }
  69.  
  70.     // Si el archivo no se puede mover a su ruta, devolvemos error.
  71.     $mover_archivo = move_uploaded_file($campo_archivo['tmp_name'], $ruta.$nombre_archivo);
  72.     if ( $mover_archivo === FALSE ) {
  73.       return 'Error: Problema al subir el archivo';
  74.     } elseif ( $mover_archivo === FALSE ) {
  75.       return 'Error: ' . $mover_archivo;
  76.     }
  77.  
  78.   return $carpeta.$nombre_archivo;
  79. }

La he usado con AJAX y para ello la función llevaba algún añadido en los errores, pero como no es el caso aquí, he quitado esos añadidos.

Si alguien sabe como hacer lo que mencionaba en el comienzo de este hilo, sigo aceptando sugerencias/ayudas/ejemplos (y se alguien me lo da hecho, ya de fábula, jejeje )