php imagecopyresampled - 保存后图像为空(全黑)
Posted
技术标签:
【中文标题】php imagecopyresampled - 保存后图像为空(全黑)【英文标题】:php imagecopyresampled - image is empty (all black) after saving it 【发布时间】:2013-07-28 07:51:23 【问题描述】:此脚本将加载图像(jpg、gif 或 png),然后保存 PNG 本地副本以进行缓存。
我正在尝试找到一种方法将图像大小调整为 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);
【问题讨论】:
【参考方案1】:为.png
图片获取solution
【讨论】:
请以我的脚本为例?以上是关于php imagecopyresampled - 保存后图像为空(全黑)的主要内容,如果未能解决你的问题,请参考以下文章
PHP GD imagecopyresampled() 并将其水平翻转
php imagecopyresampled - 保存后图像为空(全黑)
突破php 的imagecopyresampled 和imagecopyresized 实现图片马 JPG