首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Safari到PHP的.toDataURL()渲染全白图像(而不是绘制区域)

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

Stack Overflow用户
提问于 2012-04-24 02:32:58
回答 1查看 1.1K关注 0票数 3

摘要:假设我在浏览器中绘制了一个带有画布元素的白色笑脸。当我通过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存储透明度的方式有关?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-24 03:25:42

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

代码语言:javascript
复制
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 );

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10286210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档