0

特定の画像のサムネイルがフォルダに
存在するかどうかを確認する機能があります。cache存在する場合は、そのサムネイルへのパスを返します。そうでない場合は、先に進み、画像のサムネイルを生成し、それをcacheフォルダーに保存して、代わりにそのパスを返します。

問題
10 枚の画像があり、そのうちの 7 枚だけがフォルダにサムネイルを持っているとしcacheます。したがって、関数は残りの 3 つの画像のサムネイルの生成に進みます。しかし、それが行われている間、私が見るのは空白の白い読み込みページだけです. アイデアは、既に生成されているサムネイルを表示してから、存在しないものを生成することです。

コード

$images = array(
        "http://i49.tinypic.com/4t9a9w.jpg",
        "http://i.imgur.com/p2S1n.jpg",
        "http://i49.tinypic.com/l9tow.jpg",
        "http://i45.tinypic.com/10di4q1.jpg",
        "http://i.imgur.com/PnefW.jpg",
        "http://i.imgur.com/EqakI.jpg",
        "http://i46.tinypic.com/102tl09.jpg",
        "http://i47.tinypic.com/2rnx6ic.jpg",
        "http://i50.tinypic.com/2ykc2gn.jpg",
        "http://i50.tinypic.com/2eewr3p.jpg"
    );

function get_name($source) {
    $name = explode("/", $source);
    $name = end($name);
    return $name;
}

function get_thumbnail($image) {
    $image_name = get_name($image);
    if(file_exists("cache/{$image_name}")) {
        return "cache/{$image_name}";
    } else {
        list($width, $height) = getimagesize($image);
        $thumb = imagecreatefromjpeg($image);
        if($width > $height) {
            $y = 0;
            $x = ($width - $height) / 2;
            $smallest_side = $height;
        } else {
            $x = 0;
            $y = ($height - $width) / 2;
            $smallest_side = $width;
        }

        $thumb_size = 200;
        $thumb_image = imagecreatetruecolor($thumb_size, $thumb_size);
        imagecopyresampled($thumb_image, $thumb, 0, 0, $x, $y, $thumb_size, $thumb_size, $smallest_side, $smallest_side);

        imagejpeg($thumb_image, "cache/{$image_name}");

        return "cache/{$image_name}";
    }
}

foreach($images as $image) {
    echo "<img src='" . get_thumbnail($image) . "' />";
}
4

1 に答える 1

2

@DCoder のコメントを詳しく説明するには、次のようにします。

  • サムネイルがキャッシュに存在する場合は、今と同じように URL を返します。これにより、キャッシュにあるサムがすばやく読み込まれます。

  • サムネイルがキャッシュに存在しない/cache/generatethumb.php?http://i49.tinypic.com/4t9a9w.jpg場合は、スクリプトgeneratethumb.phpがサムネイルを生成してキャッシュに保存し、サムネイルを返す場所と同様の URLを返します。次回はキャッシュにあり、URL は PHP スクリプトを通過しません。

于 2013-02-03T15:05:56.980 に答える