Solución:
Si está intentando generar miniaturas, primero debe cambiar el tamaño de la imagen usando imagecopyresampled();
. Debe cambiar el tamaño de la imagen para que el tamaño del lado más pequeño de la imagen sea igual al del lado correspondiente del pulgar.
Por ejemplo, si su imagen de origen es de 1280x800px y su pulgar es de 200x150px, debe cambiar el tamaño de su imagen a 240x150px y luego recortarla a 200x150px. Esto es para que la relación de aspecto de la imagen no cambie.
Aquí hay una fórmula general para crear miniaturas:
$image = imagecreatefromjpeg($_GET['src']);
$filename="images/cropped_whatever.jpg";
$thumb_width = 200;
$thumb_height = 150;
$width = imagesx($image);
$height = imagesy($image);
$original_aspect = $width / $height;
$thumb_aspect = $thumb_width / $thumb_height;
if ( $original_aspect >= $thumb_aspect )
{
// If image is wider than thumbnail (in aspect ratio sense)
$new_height = $thumb_height;
$new_width = $width / ($height / $thumb_height);
}
else
{
// If the thumbnail is wider than the image
$new_width = $thumb_width;
$new_height = $height / ($width / $thumb_width);
}
$thumb = imagecreatetruecolor( $thumb_width, $thumb_height );
// Resize and crop
imagecopyresampled($thumb,
$image,
0 - ($new_width - $thumb_width) / 2, // Center the image horizontally
0 - ($new_height - $thumb_height) / 2, // Center the image vertically
0, 0,
$new_width, $new_height,
$width, $height);
imagejpeg($thumb, $filename, 80);
No he probado esto pero deberían trabaja.
EDITAR
Ahora probado y funcionando.
imagecopyresampled()
tomará un área rectangular de $src_image
de ancho $src_w
y altura $src_h
en la posición ($src_x, $src_y)
y colóquelo en un área rectangular de $dst_image
de ancho $dst_w
y altura $dst_h
en la posición ($dst_x, $dst_y)
.
Si las coordenadas de origen y destino y el ancho y las alturas difieren, se realizará el estiramiento o encogimiento apropiado del fragmento de imagen. Las coordenadas se refieren a la esquina superior izquierda.
Esta función se puede utilizar para copiar regiones dentro de la misma imagen. Pero si las regiones se superponen, los resultados serán impredecibles.
– Editar –
Si $src_w
y $src_h
son más pequeños que $dst_w
y $dst_h
respectivamente, la imagen del pulgar se acercará. De lo contrario, se alejará.
<?php
$dst_x = 0; // X-coordinate of destination point
$dst_y = 0; // Y-coordinate of destination point
$src_x = 100; // Crop Start X position in original image
$src_y = 100; // Crop Srart Y position in original image
$dst_w = 160; // Thumb width
$dst_h = 120; // Thumb height
$src_w = 260; // Crop end X position in original image
$src_h = 220; // Crop end Y position in original image
// Creating an image with true colors having thumb dimensions (to merge with the original image)
$dst_image = imagecreatetruecolor($dst_w, $dst_h);
// Get original image
$src_image = imagecreatefromjpeg('images/source.jpg');
// Cropping
imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
// Saving
imagejpeg($dst_image, 'images/crop.jpg');
?>
php 5.5 tiene una función de recorte de imágenes http://php.net/manual/en/function.imagecrop.php