Ver Mensaje Individual
  #5 (permalink)  
Antiguo 01/09/2015, 17:29
lubtufano
 
Fecha de Ingreso: julio-2011
Mensajes: 220
Antigüedad: 12 años, 9 meses
Puntos: 72
Respuesta: Ancho y alto fijo en imagen sin distorcionarla

Cita:
Iniciado por andoencombi Ver Mensaje
Hola amigos.

Necesito de su ayuda, resulta que necesito subir imagenes a mi servidor con un formulario en php, pero necesito que al subirlas las imagenes tomen un tamaño nuevo pero que la imagen no se distorcione, ejemplo;

imagen original 400x200
imagen nueva 1050x950

Ahora la imagen nueva se escalara un poco pero tendra la medida nueva sin distorcionar la original, es decir la centrara en la nueva imagen.

Ya estuve revisando esta liga de foros del web pero al parecer tiene errores
Hola, me gusta el tema. Prueba con esto, espero que te sirva.
Código HTML:
Ver original
  1.  
  2.     <title>subir imagen</title>
  3.     <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  4. </head>
  5.  
  6.     <form method="post" action="subirImagen.php" enctype="multipart/form-data">
  7.         Elige la imagen: <input type="file" name="imagen" />
  8.         <br/>
  9.         <input type="submit" value="enviar" name="enviar" />
  10.     </form>
  11. </body>
  12.  
  13. </html>
Código PHP:
Ver original
  1. <?php
  2.     $imagenEnviada= $_FILES["imagen"]["tmp_name"];
  3.     $tipo= explode("/", $_FILES["imagen"]["type"]);
  4.     $tipoImagen= $tipo[1];
  5.     $anchoDeseado= 1050;
  6.     $altoDeseado= 950;
  7.     list($anchoOriginal, $altoOriginal)= getimagesize($imagenEnviada);
  8.     $nuevoAncho; $nuevoAlto; $original;
  9.    
  10.     $relacionAncho= $anchoDeseado / $anchoOriginal;
  11.     $relacionAlto= $altoDeseado / $altoOriginal;
  12.    
  13.     if($relacionAncho < $relacionAlto) {
  14.         $nuevoAncho= floor($anchoOriginal * $relacionAncho);
  15.         $nuevoAlto= floor($altoOriginal * $relacionAncho);
  16.     } else {
  17.         $nuevoAncho= floor($anchoOriginal * $relacionAlto);
  18.         $nuevoAlto= floor($altoOriginal * $relacionAlto);
  19.     }
  20.    
  21.     $destinoX= ($anchoDeseado - $nuevoAncho) / 2;
  22.     $destinoY= ($altoDeseado - $nuevoAlto) / 2;
  23.    
  24.     switch($tipoImagen) {
  25.         case "jpeg":
  26.             $original= imagecreatefromjpeg($imagenEnviada);
  27.             break;
  28.         case "png":
  29.             $original= imagecreatefrompng($imagenEnviada);
  30.             break;
  31.         case "gif":
  32.             $original= imagecreatefromgif($imagenEnviada);
  33.             break;
  34.     }
  35.    
  36.     $imagen= imagecreatetruecolor($anchoDeseado, $altoDeseado);
  37.     $fondo= imagecolorallocate($imagen, 150, 150, 150);
  38.     imagefill($imagen, 0, 0, $fondo);
  39.     imagecopyresized($imagen, $original, $destinoX, $destinoY, 0, 0, $nuevoAncho, $nuevoAlto, $anchoOriginal, $altoOriginal);
  40.    
  41.     //header("Content-Type: image/png");
  42.     imagepng($imagen, "imagenGenerada.png");
  43.     imagedestroy($imagen);
  44. ?>