.toDataURL() 从 Safari 到 PHP 渲染全白图像(不是绘制区域)


.toDataURL() from Safari to PHP is rendering full white image (not drawn area)

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

我在base64_decoding之前从字符串中删除"data:image/png;base64"并保存到图像文件中。

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

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

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

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

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

提前谢谢你!

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

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

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 );

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