
Lo que deseo lograr:
Tengo imágenes de tamaño grande y necesito hacer versiones pequeñas de ellas que queden inscritas en un cuadrado de 100 x 100 pixeles. Las imágenes no son cuadradas, por lo que deberían quedar centradas con respecto al cuadrado de 100 x 100 y el espacio exedente debería ser negro.
Todo funciona bien, excepto que la maldita imagen no se escala. Es como si escalara unicamente el area visible de la imagen, pero no la propia imagen.
Aqui les dejo el código con algunas explicaciones añadidas para que vean:
Código :
<?php // El header de la imagen header("Content-type: image/jpeg"); // Creo una imagen desde un archivo jpeg. // El nombre de la imagen es enviado por GET // $img2 = imagecreatefromjpeg("imagenes/".$_GET['url_original']); $img2 = imagecreatefromjpeg("imagenes/foto2.jpg"); // Dimensiones del area donde se inscribirá la jpeg $ancho_encuadre = 100; $alto_encuadre = 100; // Dimensiones escaladas de la jpeg // posiciones X e Y donde deberá situar con respecto al área donde quedará inscrita $ancho_original = imagesx($img2); $alto_original = imagesy($img2); if ($alto_original >= $ancho_original) { $alto_escalado = $alto_encuadre; $ancho_escalado = $ancho_original * $alto_escalado / $alto_original; $pos_x = ($ancho_encuadre - $ancho_escalado)/2; $pos_y = 0; } else { $ancho_escalado = $ancho_encuadre; $alto_escalado = $alto_original * $ancho_escalado / $ancho_original; $pos_y = ($alto_encuadre - $alto_escalado)/2; $pos_x = 0; }; // Imagen de fondo sobre la que se pegará la jpeg $img1 = imagecreatetruecolor($ancho_encuadre, $alto_encuadre); // Escalo la imagen jpeg sobre la imagen de fondo ImageCopyResampled($img1,$img2,$pos_x,$pos_y,0,0,$ancho_escalado,$alto_escalado,$ancho_encuadre,$alto_encuadre); // Doy salida a la foto final como jpeg calidad 80 imagejpeg($img1, '', 80); // Destruyo ambas imágenes imagedestroy($img2); imagedestroy($img1); ?>
Desde ya, muchas gracias!