这有点奇怪。用户可以将图像上传到服务器,插入一些文本,然后从服务器端创建一个包含用户文本和上传图像的新图像。
要创建新图片,我使用imagecreatefrompng
或jpg
,具体取决于上传文件的文件类型。
如果用户不喜欢创建的图像,则用户可以编辑文本或上传其他图像并再次点击提交。
除了一次出现之外,这一切都应该有效。当用户上传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.jpg
或img_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.jpg
或img_2.png
已创建图片,未出现错误
我觉得这有点过于具体,不确定是否有人能解决这个问题。
答案 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);