这是一个人为的例子,但它比我正在使用的代码更简洁地说明了我的问题 - 我已经测试了这个并且它表现出了问题:
$image = imagecreatefromjpeg('test.jpg');
$copy_of_image = $image;
// The important bit
imagedestroy($image);
header('Content-type: image/jpeg');
imagejpeg($copy_of_image);
现在,我的期望是$copy_of_image
就是这样,但是当我运行它时,它会失败,打印出所有内容的脚本的URL。注释掉imagedestroy()
并且它可以正常工作。
$ image的var_dump提供:
resource(3) of type (gd)
那为什么我不能复制这个呢?显然,作业$copy_of_image = $image
正在创建一个引用,而不是一个副本 - 有没有办法阻止它?
答案 0 :(得分:2)
resource本身是图片的参考。因此,无论您是复制还是引用 - 将其分配给另一个变量,资源仍然引用相同的图像。你只是制作两个指向同一图像的引用。如果您销毁图像(这是imagedestroy
所做的),图像将不再可用,并且指向它的任何资源都将变为无效。
您需要使用imagecreatetruecolor
创建新图像,然后使用imagecopy
将第一张图像的内容复制到第二张图像。或者首先使用imagecreatefromjpeg
使用两个单独的资源创建两个单独的图像。