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 originalpublic function resizeToFit($width, $height, $margins = false, $hexBckColor = '000000') {
// Calculamos ambos ratios
$ratioW = $width / $this->getWidth();
$ratioH = $height / $this->getHeight();
// Obtenemos el mayor si es con recorte
// O el menor para agregar márgenes blancos donde se requiera
$ratio = ($margins === false) ?
max($ratioW, $ratioH) : min($ratioW, $ratioH); $newW = floor($this->getWidth() * $ratio); $newH = floor($this->getHeight() * $ratio);
// Redimensionamos, conservando relación de aspecto
$this->resize($newW, $newH);
// Si es necesario recortar y/o agregar márgenes en el lado más corto
if($newW != $width || $newH != $height) {
// Creamos el nuevo lienzo con las medidas que necesitamos
imagefill($newImage, 0, 0, "0x$hexBckColor");
// Si la imagen es mayor, el origen lo tomamos centrado
$ox = ($newW > $width) ?
floor(($newW - $width) / 2) : 0; $oy = ($newH > $height) ?
floor(($newH - $width) / 2) : 0; // Si la imagen es menor, dejamos márgenes en el lado más corto
$dx = ($newW < $width) ?
floor(($width - $newW) / 2) : 0; $dy = ($newH < $height) ?
floor(($height - $newH) / 2) : 0; imagecopy($newImage, $this->_image
, $dx, $dy, $ox, $oy, $width, $height); $this->_image = $newImage;
}
}
Uso
Código PHP:
Ver originalif(!empty($_FILES['image']) && $_FILES['image']['error'] == UPLOAD_ERR_OK) {
require_once 'ModifiedImage.php'
$image = new ModifiedImage($_FILES['image']['tmp_name']);
$image->resizeToFit(300, 300, true, 'ff0000');
$w400 = 'w400_' . $_FILES['image']['name'];
$image->save($w400);
?>
Imagen grabada:
<a href="/<?php echo $w400; ?>">400</a>
<?php } ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" name="submit" value="Upload" />
</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