2017-09-17 4 views
0

コードは正常に動作しています。imagecopyresampled左の画像

肖像画が中心です。

が、同様に左の位置を移動する画像が必要な場合:私は、このコードを変更

define('THUMBNAIL_IMAGE_MAX_WIDTH', 150); 
define('THUMBNAIL_IMAGE_MAX_HEIGHT', 150); 

function generate_image_thumbnail($source_image_path, $thumbnail_image_path) 
{ 
list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path); 
switch ($source_image_type) { 
    case IMAGETYPE_GIF: 
     $source_gd_image = imagecreatefromgif($source_image_path); 
     break; 
    case IMAGETYPE_JPEG: 
     $source_gd_image = imagecreatefromjpeg($source_image_path); 
     break; 
    case IMAGETYPE_PNG: 
     $source_gd_image = imagecreatefrompng($source_image_path); 
     break; 
} 
if ($source_gd_image === false) { 
    return false; 
} 
$source_aspect_ratio = $source_image_width/$source_image_height; 
$thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH/THUMBNAIL_IMAGE_MAX_HEIGHT; 
if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) { 
    $thumbnail_image_width = $source_image_width; 
    $thumbnail_image_height = $source_image_height; 
} elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) { 
    $thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio); 
    $thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT; 
} else { 
    $thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH; 
    $thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH/$source_aspect_ratio); 
} 
$thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height); 
imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height); 

$img_disp = imagecreatetruecolor(THUMBNAIL_IMAGE_MAX_WIDTH,THUMBNAIL_IMAGE_MAX_WIDTH); 
$backcolor = imagecolorallocate($img_disp,0,0,0); 
imagefill($img_disp,0,0,$backcolor); 

    imagecopy($img_disp, $thumbnail_gd_image, (imagesx($img_disp)/2)-(imagesx($thumbnail_gd_image)/2), (imagesy($img_disp)/2)-(imagesy($thumbnail_gd_image)/2), 0, 0, imagesx($thumbnail_gd_image), imagesy($thumbnail_gd_image)); 

imagejpeg($img_disp, $thumbnail_image_path, 90); 
imagedestroy($source_gd_image); 
imagedestroy($thumbnail_gd_image); 
imagedestroy($img_disp); 
return true; 
} 

generate_image_thumbnail('original_image.jpg', 'thumb_image.jpg'); //call the function 

PHP - Create Thumbnail & maintaining aspect ratio

答えて

0

からコードimagecopy関数はXY画像の座標を指定します。 xの座標を0に設定して、一番左に揃えます。

define('THUMBNAIL_IMAGE_MAX_WIDTH', 150); 
define('THUMBNAIL_IMAGE_MAX_HEIGHT', 150); 

function generate_image_thumbnail($source_image_path, $thumbnail_image_path) 
{ 
list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path); 
switch ($source_image_type) { 
    case IMAGETYPE_GIF: 
     $source_gd_image = imagecreatefromgif($source_image_path); 
     break; 
    case IMAGETYPE_JPEG: 
     $source_gd_image = imagecreatefromjpeg($source_image_path); 
     break; 
    case IMAGETYPE_PNG: 
     $source_gd_image = imagecreatefrompng($source_image_path); 
     break; 
} 
if ($source_gd_image === false) { 
    return false; 
} 
$source_aspect_ratio = $source_image_width/$source_image_height; 
$thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH/THUMBNAIL_IMAGE_MAX_HEIGHT; 
if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) { 
    $thumbnail_image_width = $source_image_width; 
    $thumbnail_image_height = $source_image_height; 
} elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) { 
    $thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio); 
    $thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT; 
} else { 
    $thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH; 
    $thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH/$source_aspect_ratio); 
} 
$thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height); 
imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height); 

$img_disp = imagecreatetruecolor(THUMBNAIL_IMAGE_MAX_WIDTH,THUMBNAIL_IMAGE_MAX_WIDTH); 
$backcolor = imagecolorallocate($img_disp,0,0,0); 
imagefill($img_disp,0,0,$backcolor); 

    imagecopy($img_disp, $thumbnail_gd_image, 0 /* changed this to 0 */, (imagesy($img_disp)/2)-(imagesy($thumbnail_gd_image)/2), 0, 0, imagesx($thumbnail_gd_image), imagesy($thumbnail_gd_image)); 

imagejpeg($img_disp, $thumbnail_image_path, 90); 
imagedestroy($source_gd_image); 
imagedestroy($thumbnail_gd_image); 
imagedestroy($img_disp); 
return true; 
} 

generate_image_thumbnail('original_image.jpg', 'thumb_image.jpg'); //call the function 
関連する問題