PHP の GD ライブラリを使用して写真のサムネイルを作成しようとしています。
ここに私が取っているステップがあります。
- GD イメージ リソースを作成します。
- 画像の高さと幅を取得する
- 高さ 100 ピクセル、適切な幅の空白の gd 画像リソースを作成する
- リソース イメージを空の gd イメージ リソースにコピーし、両方のイメージを保存します。
これが私のコードです:
private function getExtension($filename) {
$position=strrpos($filename, '.');
$extension = strtolower(substr($filename, $position+1));
if ($extension == "jpg") {
$extension = "jpeg";
}
return $extension;
}
public function saveImage($parameters) {
$extension=$this->getExtension($parameters['filename']);
$createImageFunc="imagecreatefrom".$extension;
$imgResource=$createImageFunc(SITE_PATH."tmp/{$parameters['filename']}");
$width=imagesx($imgResource);
$height=imagesy($imgResource);
$ratio=$height/$width;
$thumbnail=imagecreatetruecolor(100, 100*$ratio);
imagecopyresized($thumbnail, $imgResource, 0, 0, 0, 0, 100*$ratio, 100, $width, $height);
$imgResult=imagejpeg($imgResource, SITE_PATH."images/{$parameters['galleryName']}/{$parameters['filename']}");
$thumbResult=imagejpeg($thumbnail, SITE_PATH."images/{$parameters['galleryName']}/thumbnails/{$parameters['filename']}");
}
画像は保存されていますが、コピーが機能していません。サムネイル画像に空の黒いスペースがあります。
これは元の画像です:
これは、gd で再度保存された画像です。
これはサムネイルです:
私は 4 重チェックの imagecopyresize が好きで、私が理解していることから、コード内のすべての値は正しいはずです。
php.net の値は次のとおりです。
bool imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
アイデアはありますか?