2010-05-21 46 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