Ver Mensaje Individual
  #77 (permalink)  
Antiguo 02/08/2011, 01:50
Avatar de Triby
Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: [APORTE] Subir y redimensionar imagenes

Bueno, yo tambien necesitaba recortar imagenes, principalmente porque cuando requieres de vista previa (thumbnail) casi siempre es con dimensiones fijas, asi que... a ver si sirve de algo el aporte:

Código PHP:
Ver original
  1. public function resizeToFit($width, $height, $margins = false) {
  2.         // Calculamos ambos ratios
  3.         $ratioW = $width / $this->getWidth();
  4.         $ratioH = $height / $this->getHeight();
  5.         // Obtenemos el mayor si es con recorte
  6.         // O el menor para agregar márgenes blancos donde se requiera
  7.         $ratio = ($margins === false) ? max($ratioW, $ratioH) : min($ratioW, $ratioH);
  8.         $newW = floor($this->getWidth() * $ratio);
  9.         $newH = floor($this->getHeight() * $ratio);
  10.  
  11.         // Redimensionamos, conservando relación de aspecto
  12.         $this->resize($newW, $newH);
  13.  
  14.         // Si es necesario recortar y/o agregar márgenes en el lado más corto
  15.         if($newW != $width || $newH != $height) {
  16.             // Creamos el nuevo lienzo con las medidas que necesitamos
  17.             $newImage = imagecreatetruecolor($width, $height);
  18.  
  19.             // Si la imagen es mayor, el origen lo tomamos centrado
  20.             $ox = ($newW > $width) ? floor(($newW - $width) / 2) : 0;
  21.             $oy = ($newH > $height) ? floor(($newH - $width) / 2) : 0;
  22.             // Si la imagen es menor, dejamos márgenes en el lado más corto
  23.             $dx = ($newW < $width) ? floor(($width - $newW) / 2) : 0;
  24.             $dy = ($newH < $height) ? floor(($height - $newH) / 2) : 0;
  25.  
  26.             imagecopy($newImage, $this->_image, $dx, $dy, $ox, $oy, $width, $height);
  27.             $this->_image = $newImage;
  28.         }
  29.     }

Las medidas son fijas, asi que:
$margins === false => Se redimensiona la imagen para ajustar la parte mas corta (ancho o alto) a las medidas deseadas y despues se recorta la parte central, ejemplo:
$_img->resizeToFit(300, 300);


$margins === true => Se redimensiona la imagen para ajustar la parte mas grande (ancho o alto) y se agrega un margen (arriba/abajo o izquierda/derecha)... habra que ver si podemos cambiar el color de este... ejemplo:
$_img->resizeToFit(300, 300, true);
__________________
- León, Guanajuato
- GV-Foto