我找到了解决问题的方法。请参阅下面的原始帖子,完全在我的解决方案的底部。我犯了一个愚蠢的错误:)
首先,我裁剪图像,然后将其保存到png文件中。在此之后,我也会显示图像 但是,保存的png没有透明度,显示的是透明的。发生了什么事?
$this->resource = imagecreatefrompng($this->url);
imagealphablending($this->resource, false);
imagesavealpha($this->resource, true);
$newResource = imagecreatetruecolor($destWidth, $destHeight);
imagealphablending($newResource, false);
imagesavealpha($newResource, true);
$resample = imagecopyresampled($newResource,$this->resource,0,0,$srcX1,$srcY1,$destWidth,$destHeight,$srcX2-$srcX1, $srcY2-$srcY1);
imagedestroy($this->resource);
$this->resource = $newResource;
// SAVING
imagepng($this->resource, $destination, 100);
// SHOWING
header('Content-type: image/png');
imagepng($this->resource);
我也保存图像的原因是用于缓存。如果脚本在png上执行,则会保存缓存的png
下次请求图像时,将显示png文件,但它已失去透明度。
更奇怪的是:
"file-format module cannot parse the file"
。一旦我尝试用GD库显示保存的PNG,它就会给我一个错误。
解
我发现了问题所在。这是一个愚蠢的错误。我上面提供的脚本是从一个类中删除并作为顺序代码放置,而实际上这并不是完全发生的。保存图像功能:
function saveImage($destination,$quality = 90)
{
$this->loadResource();
switch($extension){
default:
case 'JPG':
case 'jpg':
imagejpeg($this->resource, $destination, $quality);
break;
case 'gif':
imagegif($this->resource, $destination);
break;
case 'png':
imagepng($this->resource, $destination);
break;
case 'gd2':
imagegd2($this->resource, $destination);
break;
}
}
然而...... $ extension不存在。我通过添加:
来修复它$extension = $this->getExtension($destination);