这是我目前的代码:
$image = 'img.jpg';
$source = imagecreatefromjpeg($image);
list($origWidth, $origHeight) = getimagesize($image);
$imgH = 75;
$imgW = $origWidth / $origHeight * $imgH;
$thumb = imagecreatetruecolor($imgW, $imgH);
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $imgW, $imgH, $origWidth, $origHeight);
这允许我输出固定高度为75像素的图像。我想要做的是拥有99x75
像素的恒定图像大小。不适合的肖像图像将从中心裁剪(因此原件的中心仍然是缩略图的中心 - 如果有意义的话)。
我该怎么做?
答案 0 :(得分:2)
嗯,这是纯数学。你想要达到99x75的尺寸,而你只想从宽度上切割。首先,你调整大小以适应高度。这就是你所做的,但它适合75的高度。将它切换到99.然后你,检查宽度是< = 75.如果不是那么你这样做:
if( $imgW > 75 )
{
$diff = $imgw - 75; // this is what's extra
$srcX = ceil( $diff / 2 ); // this is where your img starts from
$imgW = 75;
}
imagecopyresampled($thumb, $source, 0, 0, $srcX, 0, $imgW, $imgH, $origWidth, $origHeight); // notice that src X changed accordingly.
因此,如果第一个“调整大小”之后的宽度为100并且您想要75,则计算diff = 25,将其分割为2并将其分割为=> 13,然后你告诉GD功能开始从13而不是0复制图像,并仍然保持75高度。这意味着它将从宽度13复制到witdh 88 =>中心。
希望这是你想要的。 问候, 加布里埃尔
答案 1 :(得分:1)
define( 'THUMB_WIDTH', 99 );
define( 'THUMB_HEIGHT', 75 );
$image = imagecreatefromjpeg('img.jpg');
$thumb = imagecreatetruecolor(THUMB_WIDTH, THUMB_HEIGHT);
list($image_width, $image_height) = getimagesize($image);
$x0 = ( $image_width - THUMB_WIDTH ) / 2;
$y0 = ( $image_height - THUMB_HEIGHT ) / 2;
imagecopy(
$thumb, // resource $dst_im
$image, // resource $src_im
0, // int $dst_x
0, // int $dst_y
$x0, // int $src_x
$y0, // int $src_y
THUMB_WIDTH, // int $src_w
THUMB_HEIGHT // int $src_h
);
此代码使用imagecopy
函数从源图像复制99x75px区域。源宽度 - 99/2返回开始复制的x坐标,源高度 - 75/2返回y坐标。如果您有兴趣从任意大小的图像生成固定大小的缩略图,请查看this article。
答案 2 :(得分:0)
(未测试的)
define('THUMB_WIDTH', 99);
define('THUMB_HEIGHT', 75);
$image = 'img.jpg';
$source = imagecreatefromjpeg($image);
$thumb = imagecreatetruecolor(THUMB_WIDTH, THUMB_HEIGHT);
$cutX = imagesx($source) > THUMB_WIDTH;
$cutY = imagesy($source) > THUMB_HEIGHT;
$source_x = $cutX ? imagesx($source) / 2 - (THUMB_WIDTH/2) : 0;
$source_y = $cutY ? imagesx($source) / 2 - (THUMB_HEIGHT/2) : 0;
$source_width = $cutX ? THUMB_WIDTH : imagesx($source);
$source_height = $cutY ? THUMB_HEIGHT : imagesy($source);
imagecopyresampled($thumb, $source, 0, 0, $source_x, $source_y, $source_width, $source_height, THUMB_WIDTH, THUMB_HEIGHT);