2013-07-28 3 views
0

Этот скрипт загрузит изображение (jpg, gif или png), а затем сохранит локальную копию PNG для кеширования.php imagecopyresampled - изображение пуста (все черное) после сохранения

Я пытаюсь найти способ изменить размер изображения до 300x300, прежде чем сохранять его как PNG.

Я попытался использовать функцию imagecopyresampled(), но изображение все еще не изменено.

2 проблема сейчас:

  • Скрипта сохраняет измененный размер PNG изображения в нужной папке, но изображение пустое (это все черный)

  • В первый раз я загружу изображение , я получу ошибку (изображение не может быть отображено, потому что оно содержит ошибку), но изображение все равно будет сохранено как PNG в папке с кешем. Во второй раз я загружаю изображение, оно будет отображаться правильно (с использованием кешированной версии), но оно не изменяется.

Полный код моей страницы. Первая часть используется для кэширования изображения, то вторая часть используется для отображения некэшируемых изображений (он считывает изображение из 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); 
      } 
} 

ответ

Смежные вопросы