Ver Mensaje Individual
  #78 (permalink)  
Antiguo 02/08/2011, 08:39
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] Subir y redimensionar imagenes

Muy bueno triby, ya lo voy a añadir, solo que sería bueno que el fondo fuera de acuerdo a como el usuario quisiera, en el caso 2 que traes tiene un fondo negro, logre hacer parte del fondo que se convirtiera de otro color, pero no logro que sean en ambas partes, te dejo lo que he hecho solo añadí una línea adicional y un parametro extra
Código PHP:
Ver original
  1. public function resizeToFit($width, $height, $margins = false, $hexBckColor = '000000') {
  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.     // Si es necesario recortar y/o agregar márgenes en el lado más corto
  14.     if($newW != $width || $newH != $height) {
  15.         // Creamos el nuevo lienzo con las medidas que necesitamos
  16.         $newImage = imagecreatetruecolor($width, $height);
  17.         imagefill($newImage, 0, 0, "0x$hexBckColor");
  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.         imagecopy($newImage, $this->_image, $dx, $dy, $ox, $oy, $width, $height);
  26.         $this->_image = $newImage;
  27.     }
  28. }

Uso
Código PHP:
Ver original
  1. if(!empty($_FILES['image']) && $_FILES['image']['error'] == UPLOAD_ERR_OK) {
  2.     require_once 'ModifiedImage.php'
  3.     $image = new ModifiedImage($_FILES['image']['tmp_name']);
  4.     $image->resizeToFit(300, 300, true, 'ff0000');
  5.     $w400 = 'w400_' . $_FILES['image']['name'];
  6.     $image->save($w400);
  7. ?>
  8. Imagen grabada:
  9. <a href="/<?php echo $w400; ?>">400</a>
  10. <?php } ?>
  11.  
  12. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
  13.     <input type="file" name="image" />
  14.     <input type="submit" name="submit" value="Upload" />
  15. </form>

Esto provoca que si por ejemplo una imagen tiene los bordes en la izquierda y derecha, la izquierda tenga el color indicado pero la derecha tenga el color negro. No lo he probado con los bordes arriba y abajo, me imagino que hará que sea arriba conforme al color deseado y abajo color negro. Te la dejo para ver si encuentras la forma como arreglarlo, si no se encuentra la forma pues lo colocó así como la haz creado Muy bueno
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos