3

摘要:假设我在浏览器中使用画布元素绘制了一个白色笑脸。当我在 Safari 中通过 js/ajax(使用 toDataUrl('image/png') )从这个画布生成一个图像字符串以 POST 到 PHP 服务器时,使用 PHP 函数 imagecreatefromstring() 和 imagepng() 在服务器上创建的图像是正确的高度和宽度,但它都是白色的,而不是浏览器中画布上的笑脸。

我正在从 base64_decoding 之前的字符串中剥离“data:image/png;base64”并保存到图像文件中。

此方法在 FF 和 Chrome 中完美运行。

toDataUrl 在 js 中生成的 base64 编码字符串经过验证与服务器正在接收的字符串相同,因此在传输中不会被切断。

当我将图像字符串从 toDataUrl() 加载到任何浏览器时,它会按预期显示绘制的图像。但是,在服务器上生成的 newimage.png 完全是白色的。

Safari 将图像编码为需要在服务器上考虑的 base64 字符串有什么不同吗?如果是这样,它不能太激烈,因为任何浏览器都能够从图像字符串中呈现正确的笑脸。

如果您需要更多信息,请随时告诉我。

先感谢您!

编辑:这可能与 Safari 如何存储透明度有关吗?

4

1 回答 1

1

您是否尝试过导出不透明的图像?在调用 toDataURL 之前,您可以考虑用纯色填充背景。

var ctx = document.getElementById('my_canvas').getContext('2d');
var w = $("#my_canvas").width();
var h = $("#my_canvas").height();
ctx.globalCompositeOperation = 'lighter';
ctx.fillStyle = "#000";
ctx.fillRect( 0, 0, w, h );

这样的事情应该会产生更一致的结果。

于 2012-04-23T19:25:41.983 回答