Vamos a redimensionar una imagen con distintos tamaños respetando las proporciones de la imagen original.
La función recibe la ubicación y el ancho que llevará nuestra nueva imagen, pero puede mejorarse obteniendo como base el ancho de la imagen original y reducirla en un porcentaje.
<?php
function redimensionar_jpeg($type,$img_original, $img_alt = 150){
if(file_exists($img_original)) { // crear imagen desde original
$type=strtolower($type);
switch($type){
case 'jpeg': $img = ImageCreateFromJPEG($img_original); break;
case 'jpg': $img = ImageCreateFromJPEG($img_original); break;
case 'png': $img = ImageCreateFromPNG($img_original); breaK;
case 'gif': $img = ImageCreateFromGIF($img_original); breaK;
case 'wbmp': $img = ImageCreateFromWBMP($img_original); break;
}
}else{
$img = ImageCreateFromJPEG($defecto);
}
if(!empty($img)) {
//solamente proporcionamos el alto de la imagen
return imagescale( $img, $img_alt );
}
}
// preparamos una marca de agua
$estampa = redimensionar_jpeg('jpg','imagenes/marca.jpg',150);
//preparamos la foto principal
$im = imagecreatefrompng('imagenes/foto.png');
// Establecer los márgenes para la estampa y obtener el alto/ancho de la imagen de la estampa
$margen_dcho = 140;
$margen_inf = 560;
$sx = imagesx($estampa);
$sy = imagesy($estampa);
imagecopy($im, $estampa, imagesx($im) - $sx - $margen_dcho, imagesy($im) - $sy - $margen_inf, 0, 0, imagesx($estampa), imagesy($estampa));
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
Para este ejemplo utilizamos imagescale, es bastante sencillo para darnos cuenta de lo fácil que es redimensionar una imagen. Pero podemos agregar transparencias, textos, etc, etc.
imagescale(
resource $image,
int $new_width,
int $new_height = -1,
int $mode = IMG_BILINEAR_FIXED
): resource