2

PHP の GD ライブラリを使用して写真のサムネイルを作成しようとしています。

ここに私が取っているステップがあります。

  1. GD イメージ リソースを作成します。
  2. 画像の高さと幅を取得する
  3. 高さ 100 ピクセル、適切な幅の空白の gd 画像リソースを作成する
  4. リソース イメージを空の 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 )

アイデアはありますか?

4

2 に答える 2

0

PHP/GD での作業は面倒な場合があるため、作業をより簡単にするためにライブラリを作成しました: SimpleImage

SimpleImage を使用すると、2 つの単純な行でサムネイルを作成できます。

// Load image from image.jpg
$image = new \claviska\SimpleImage('image.jpg');

// Create a 100x100 thumbnail, convert to PNG, and save to thumb.png
$image->thumbnail(100, 100)->toFile('thumb.png', 'image/png');

それでも手動でやりたがる場合は、imagecopyresizedパラメーターを確認してください。幅に が掛けられているのはなぜ$ratioですか?

于 2017-01-10T22:28:34.503 に答える
0

これを見てください: PHP/GD Imagestyle
サムネイルや必要なものすべてを簡単に作成できます

// create a thumbnail
$thumb = imagestyle($image,'autosize:100 100');
// resize the image # resize:200 0; means width=200 height=auto
$resized = imagestyle($image,'resize:200 0;');
// crop it # left=0, top=50, width=200, height=200
$cropped = imagestyle($image,'crop:0 50 200 200;');
// and more
于 2014-09-09T11:54:02.363 に答える