2

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

要创建新图像,我正在使用imagecreatefrompngjpg取决于上传文件的文件类型。

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

从用户上传的图像创建图像并测试

除了一次出现外,这一切都可以正常工作。当用户上传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

图像已创建,没有错误发生

我想这有点太具体了,不知道是否有人可以解决这个问题。

4

1 回答 1

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);
于 2014-07-03T10:50:04.843 回答