2014-07-03 50 views
2

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

图像,也不会出现错误

我想这一个有点太具体,不确定是否有人能解决这个问题。

回答

0

这可能是因为透明度以及您使用PNG的方式。我曾多次与PNG的原因问题合作过。我一直解决它的方法是通过上传创建另一个PNG和该文件,而不是上传一个工作:

$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); 
+0

所以我创建上传图像的图像,保存一个并与工作。 ..我会尝试一下。 –

+0

这是正确的。无论如何请试一试,并检查是否启用了GD PNG支持。 – beingalex

+0

不幸的是仍然有同样的问题 –