摘要:假设我在浏览器中绘制了一个带有画布元素的白色笑脸。当我通过Safari中的js/ajax (使用toDataUrl(' image /png') )从这个画布生成要发布到PHP服务器的图像字符串时,使用PHP函数imagecreatefromstring()和imagepng()在服务器上创建的图像是正确的高度和宽度,但它是白色的,而不是浏览器中画布上的笑脸。
我从base64_decoding之前的字符串中去掉了"data: image /png;base64“并保存到图像文件中。
这种方法在FF和Chrome中可以完美地工作。
toDataUrl在js中生成的base64编码字符串被验证为与服务器接收的字符串相同,因此它在传输过程中不会被切断。
当我将图像字符串从toDataUrl()加载到任何浏览器中时,它都会按预期显示绘制的图像。但是,在服务器上生成的newimage.png完全是白色的。
Safari是否做了一些不同的事情,将图像编码成需要在服务器上使用的base64字符串?如果是这样的话,它不能太激烈,因为任何浏览器都能够从图像字符串中呈现正确的笑脸。
如果您需要更多信息,请随时与我联系。
提前谢谢你!
编辑:这是否与Safari存储透明度的方式有关?
发布于 2012-04-24 03:25:42
您是否尝试过导出没有透明度的图像?在调用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 );像这样的事情应该会产生更一致的结果。
https://stackoverflow.com/questions/10286210
复制相似问题