lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 12558|回复: 11
打印 上一主题 下一主题

求助!苹果手机getDataURL方法出现问题

[复制链接]

38

主题

3

好友

500

积分

裨将军

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2016-10-25 16:09:04 |只看该作者 |倒序浏览
先贴代码:
  1. var draw_bmd = new LBitmapData(null,0,0,640,1040);
  2. draw_bmd.draw(work_container);
  3. var draw_bmp = new LBitmap(draw_bmd);
  4. var draw_img_data = draw_bmp.getDataURL("image/jpeg",0.7);
  5. alert(draw_img_data);
复制代码
很简单,对不对?新建一个LBitmapData对象,然后draw一个显示对象,生成一个LBitmap,再去通过getDataURL方法获取Base64图片数据,保存成图片文件。在电脑上测试没问题,安卓手机(华为p9)测试没问题,但是在苹果手机上draw以后LBitmap显示出来是正常的,但是Base64图片数据保存以后就变成一张全黑的图片了。苹果手机上alert出来的Base64数据显示如下图:
545302946157659708.jpg
79932101918018854.jpg

这个数据看起来就有问题吧?为什么getDataURL方法在苹果手机上会出问题呢?我折腾一天了还没搞清楚,求助!
回复

使用道具 举报

37

主题

8

好友

9309

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

沙发
发表于 2016-10-26 10:25:21 |只看该作者
数据保存下来对比一下看看一不一样
不回答与技术和引擎不相关的问题
回复

使用道具 举报

38

主题

3

好友

500

积分

裨将军

Rank: 3Rank: 3

板凳
发表于 2016-10-27 16:26:13 |只看该作者
对比了,苹果保存的数据不一样。就苹果有问题,pc和安卓没问题。另外就是在苹果手机上用canvas原生的toDataURL方法保存base64也是没问题的。
回复

使用道具 举报

37

主题

8

好友

9309

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

地板
发表于 2016-10-27 20:35:38 |只看该作者
ohufei 发表于 2016-10-27 16:26
对比了,苹果保存的数据不一样。就苹果有问题,pc和安卓没问题。另外就是在苹果手机上用canvas原生的toData ...

http://lufylegend.com/html5/lufylegend/ps.html
我这里有个demo,iphone6s和ipad测试都好用,你试试看吧
不回答与技术和引擎不相关的问题
回复

使用道具 举报

38

主题

3

好友

500

积分

裨将军

Rank: 3Rank: 3

5#
发表于 2016-10-31 19:59:18 |只看该作者
老大,不是每次使用getDataURL方法都有问题,以前做的项目也没问题,这次可能是处理的图片尺寸比较大(加载进来的图片大概有3000x4000像素的样子,然后截取一部分),就出这个问题了。如果是小尺寸图片,截取范围小的时候是没问题的。这次用其他方式处理了,但是这个问题确实在苹果手机上是存在的,不知道是lufy框架的问题还是我处理不当的原因?
回复

使用道具 举报

37

主题

8

好友

9309

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

6#
发表于 2016-11-1 09:20:44 |只看该作者
ohufei 发表于 2016-10-31 19:59
老大,不是每次使用getDataURL方法都有问题,以前做的项目也没问题,这次可能是处理的图片尺寸比较大(加载 ...

苹果手机对于网页中的图片以及canvas的大小是有限制的,你的图片尺寸应该是超过限制了
不回答与技术和引擎不相关的问题
回复

使用道具 举报

38

主题

3

好友

500

积分

裨将军

Rank: 3Rank: 3

7#
发表于 2016-11-1 15:21:01 |只看该作者
图片在lufy里加载进来显示是正常的,直接使用“main_canvas”的toDataURL方法获取到的base64也没有问题,只是在lufy里用getDataURL方法获取的base64有问题。
回复

使用道具 举报

37

主题

8

好友

9309

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

8#
发表于 2016-11-1 15:50:06 |只看该作者
ohufei 发表于 2016-11-1 15:21
图片在lufy里加载进来显示是正常的,直接使用“main_canvas”的toDataURL方法获取到的base64也没有问题,只 ...

你所说的main_canvas,它的大小就是游戏初始化的大小,无论你用的图片多大,它的大小是固定的,用toDataURL得到的图像就是画面上显示的那部分图像,所以你用它toDataURL没有问题啊
但是引擎里的getDataURL,是将整个对象进行toDataURL,为了得到完整的图片,会根据图片大小来设定canvas的大小,然后再进行toDataURL
所以,两者使用的canvas以及得到的data大小是不一样的
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9309

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

9#
发表于 2016-11-1 15:54:48 |只看该作者
  1. var draw_bmd = new LBitmapData(null,0,0,640,1040);
  2. draw_bmd.draw(work_container);
  3. var draw_bmp = new LBitmap(draw_bmd);
  4. var draw_img_data = draw_bmp.getDataURL("image/jpeg",0.7);
  5. alert(draw_img_data);
复制代码
这个是你贴出来的代码,640,1040的大小应该没问题啊,你是说这部分代码得到的data有问题吗?还是实际上有问题的代码跟这个不一样
不回答与技术和引擎不相关的问题
回复

使用道具 举报

38

主题

3

好友

500

积分

裨将军

Rank: 3Rank: 3

10#
发表于 2016-11-8 17:18:46 |只看该作者
lufy 发表于 2016-11-1 15:50
你所说的main_canvas,它的大小就是游戏初始化的大小,无论你用的图片多大,它的大小是固定的,用toDataUR ...

可能就是您说的这个问题,因为draw_bmd这个draw的那个对象work_container,加载了用户上传的照片(尺寸太大),造成后面getDataURL的问题。但是draw之后显示还是正常的,使用getDataURL生成的base64数据就有问题了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-4-20 17:36 , Processed in 0.061081 second(s), 26 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部