imagecreatefrompng并不总是处理同一图像

时间:2014-07-03 10:31:34

标签: php imagecreatefrompng

这有点奇怪。用户可以将图像上传到服务器,插入一些文本,然后从服务器端创建一个包含用户文本和上传图像的新图像。

要创建新图片,我使用imagecreatefrompngjpg,具体取决于上传文件的文件类型。

如果用户不喜欢创建的图像,则用户可以编辑文本或上传其他图像并再次点击提交。

Create image from user's uploaded image and test

除了一次出现之外,这一切都应该有效。当用户上传png文件时,如果用户决定更改某些文字并拥有相同的png文件,则会创建新图片:我收到此警告:

Warning: imagecreatefrompng(): '..path.../temp/1404381132_my_png.png' is not a valid PNG file in ...path\save_image.php

真的有点奇怪,如果同一张图片第一次工作,为什么它第二次无效呢?

我在jpgs上测试了同样的事情并且没有问题。

只是为了让您了解一些测试用例:

测试案例1

用户文字1:abc 用户文字2:abc 图片:img.jpg

已创建图片,未出现错误

用户决定更改某些文字但具有相同的图片:

用户文字1:abcdef 用户文字2:abcdef

已创建图片,未出现错误

用户决定更改图片

图片:img_2.jpgimg_2.png

已创建图片,未出现错误

测试案例2

用户文字1:abc 用户文字2:abc 图片:img.png

已创建图片,未出现错误

用户决定更改某些文字但具有相同的图片:

用户文字1:abcdef 用户文字2:abcdef

Warning image is not a valid PNG错误

测试案例3

用户文字1:abc 用户文字2:abc 图片:img.png

已创建图片,未出现错误

用户决定更改图片:

图片:img_2.jpgimg_2.png

已创建图片,未出现错误

我觉得这有点过于具体,不确定是否有人能解决这个问题。

1 个答案:

答案 0 :(得分:0)

这可能是因为透明度以及您使用PNG的方式。我曾经多次使用PNG导致问题。我一直在解决它的方法是从上传创建另一个PNG并处理THAT文件,而不是上传的文件:

$uploaded = imagecreatefrompng('uploaded.png');

// Create a template canvas
$template = imagecreatetruecolor(imagesx($uploaded), imagesy($uploaded));

// Copy the uploaded image onto the canvas, keeping same height and width
imagecopyresampled($template, $uploaded, 0, 0, 0, 0, imagesx($uploaded), imagesy($uploaded), imagesx($uploaded), imagesy($uploaded));

// Save it and work on this one
imagepng($template, 'workingfile.png');

imagedestroy($template);