2010-05-21 41 views
2

这是我的当前代码:PHP GD - 如何修改我的Thumbnail Creator以从中心裁剪人像图像?

$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像素。不适合的肖像图像将从中心裁切(所以原稿的中心仍然是缩略图的中心 - 如果有意义的话)。

我该怎么做?

回答

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. 

所以,如果第一个“resize”之后的宽度是100并且你想要75,那么计算diff = 25,将它分割为2并且将它设为cele => 13,然后告诉GD函数从13开始复制图像,而不是0,仍然保持75高度。这意味着它将从宽度13复制到88 =>中心。

希望这是你想要的。 问候, 加布里埃尔

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); 
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