-
- /* 元ファイルが存在するか確認し、元ファイルの情報を取得します*/
- $org_info = @getimagesize($img)
- $img_org = $this->img_resource($img, $org_info; [2] );
-
- /* 元の画像とサムネイル画像のサイズ比*/
- $scale_org = $org_info[0] / $org_info[1];
- /* サムネイルの幅と背景がサムネイルと同じサイズの場合*/
- if ($thumb_width == 0 && $thumb_height == 0) {
- $thumb_width = $org_info[0];
- $thumb_height = $org_info[ 1];
- } else {
- if ($thumb_width == 0)
- {
- $thumb_width = $thumb_height * $scale_org;
- }
- if ($thumb_height == 0)
- {
- $thumb_height = $thumb_width / $scale_org ;
- }
- }
-
- / * サムネイルを作成するための識別子*/
- if ($gd == 2)
- {
- $img_thumb = imagecreatetruecolor($thumb_width, $thumb_height)
- }
- else
- {
- $img_親指 = imagecreate ($thumb_width, $thumb_height) );
- }
- $clr = imagecolorallocate($img_thumb, 255, 255, 255)
- imagefilledrectangle($img_thumb, 0, 0, $thumb_height, $clr);
- if ($org_info[0] / $thumb_width > Subject*/
- $lessen_width = $thumb_height * $scale_org;
- $lessen_height = $thumb_height;
- }
-
- $dst_x = ($thumb_width - $lessen_width) / 2;
- $ dst_y = ($thumb_height - $lessen_height) / 2;
-
- /* 元の画像を拡大縮小します*/
- if ($gd == 2)
- {
- imagecopyresampled($img_thumb, $img_org, $dst_x, $dst_y, 0, 0, $lessen_width, $lessen_height, $org_info[0], $org_info[1]);
- }
- else
- {
- imagecopyresize($img_thumb, $img_org, $dst_x, $dst_y, 0, 0, $lessen_width, $ 2 番目の方法は、指定された幅と高さを元の画像から直接切り取って使用することです。白いエッジが表示されるのは望ましくありません。この方法は方位角モードと固定点モードに分けられ、方位角モードはカット開始点となる上端、中端、下端の左中右の方向に応じて9点に分割できます。 -point モードでは、ユーザーは切断の開始点を定義できます。この方法も、まず画面として指定したサイズの白い画像(bbs.it-home.org)を作成し、次にimagecopy関数を使用して元の画像上で指定したサイズと位置の画像を切り出し、その後、 imagecopyresampled 関数は、カットされたイメージを画面にカバーします。
-
- 利点:
基本的に、白い背景領域が画像に表示されないことを保証でき、画像空間全体を元の画像のコンテンツで埋めることができます。
デメリット:致命的なデメリットとしては、サムネイルに元画像の内容が完全に反映されないこと。例えば、キャラクター画像によっては、左上を切り出し開始点とした場合、顔が半分しか表示されない場合がある。
したがって、2 つのモードのどちらかを選択する場合は、実際のニーズに応じて選択する必要があります。
-
- コアコード:
-
-
-
- $img_org = $this->img_resource($img, $org_info[2]);
-
- /* サムネイルのサイズ比率*/
- $scale_org = $thumb_width / $thumb_height;
/* サムネイルを作成識別子 */ if ($gd == 2) { $img_thumb = imagecreatetruecolor($thumb_width, $thumb_height); else { $img_thumb = imagecreate($thumb_width, $thumb_height) } $clr = imagecolorallocate($img_thumb, 255, 255, 255); imagefilledrectangle($img_thumb, 0, 0, $thumb_width, $thumb_height, $clr); /* トリミングされた画像の幅と高さを計算します*/ $mid_width = ($org_info[0] $mid_height = ($org_info[1] // カット画像の背景アートボードを作成 $mid_img = imagecreatetruecolor($mid_width, $mid_height);
// カット画像データをアートボードにコピーしてカット画像を生成
imagecopy($mid_img, $ img_org, 0 , 0, 0, 0, $mid_width, $mid_height);
/* 元の画像を拡大縮小します*/
if ($gd == 2)
{
imagecopyresampled($img_thumb, $mid_img, 0, 0, 0, 0 , $thumb_width, $thumb_height, $mid_width, $mid_height);
}
else
{
imagecopyresize($img_thumb, $mid_img, 0, 0, 0, 0, $thumb_width, $thumb_height, $mid_width , $mid_height);
}
コードをコピー
|