0

このスクリプトは、画像 (jpg、gif、または png) をロードし、キャッシング用に PNG ローカル コピーを保存します。

PNGとして保存する前に、画像のサイズを300x300に変更する方法を見つけようとしています。

関数 imagecopyresampled() を使用しようとしましたが、画像のサイズはまだ変更されていません。

現在2つの問題があります:

  • スクリプトはサイズ変更された PNG 画像を正しいフォルダーに保存しますが、画像は空です (すべて黒です)。

  • 画像を初めて読み込むと、エラーが発生します (エラーが含まれているため画像を表示できません) が、画像はキャッシュ フォルダーに PNG として保存されます。画像を 2 回目に読み込むと、(キャッシュされたバージョンを使用して) 正しく表示されますが、サイズは変更されません。

これが私のページの完全なコードです。最初の部分は画像をキャッシュするために使用され、2 番目の部分はキャッシュされていない画像を表示するために使用されます (ZIP ファイルから画像を読み取り、何も抽出せずにコンテンツを出力します)。

if (empty($_GET['display'])) {
header('Content-Type: image/png');

            $imgpochette = $_GET['i'];

            $ENABLE_CACHE = true;
            $CACHE_TIME_HOURS = 744;
            $CACHE_FILE_PATH = "pochette_album/$imgpochette.png";

            if($ENABLE_CACHE && file_exists($CACHE_FILE_PATH) && (time() - filemtime($CACHE_FILE_PATH) < ($CACHE_TIME_HOURS * 60 * 60))) {
              echo @file_get_contents($CACHE_FILE_PATH);
            } else {
                    // Load the requested image
                    $imgdisplay = "http://www.pirate-punk.com/pochette.php?i=$imgpochette&display=1";
                    $image = imagecreatefromstring(file_get_contents($imgdisplay));
$width = "30";
$height = "30";
list($originalWidth, $originalHeight) = getimagesize($CACHE_FILE_PATH);
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $image, 0, 0, 0, 0, $width, $height, $originalWidth, $originalHeight);
                    // Send the image
                    imagepng($new_image, $CACHE_FILE_PATH);
                    exit();
              @file_put_contents($CACHE_FILE_PATH, $output);
              echo $output;
            }

}







if (!empty($_GET['display'])) {
        function showimage($zip_file, $file_name) {
            $z = new ZipArchive();
            if ($z->open($zip_file) !== true) {
                echo "File not found.";
                return false;
            }

            $stat = $z->statName($file_name);
            $fp   = $z->getStream($file_name);
                // search for a path/to/file matching file, returning the index of it
                $index = $z->locateName($file_name, ZipArchive::FL_NOCASE|ZipArchive::FL_NODIR);
                // get the name of the file based on the index
                $full_file_name = $z->getNameIndex($index);
                // now get the stream
                $fp = $z->getStream($full_file_name);

            if(!$fp) {
                echo "Could not load image.";
                return false;
            }

            header('Content-Type: image/jpeg');
            header('Content-Length: ' . $stat['size']);
            fpassthru($fp);
            return true;
        }

        $imgsrcencoded = $_GET['i'];
        $imagesrc = base64_decode($imgsrcencoded);
        $explodez = explode("#",$imagesrc);
        $imgg = utf8_encode($explodez[1]);
        $dirnfile = $explodez[0];
        $zipp = end((explode('/', $dirnfile)));
        $dirr = str_replace($zipp,"",$dirnfile);
        $dirr = rtrim($dirr,"/");
        $imgg = rtrim($imgg);
        chdir($dirr);
            if (empty($_GET['debug'])) {
            echo showimage($zipp,$imgg);
            }
}
4

1 に答える 1