cococreater3.3 cmyk色彩空间图片在ios13设备上无法显示,毕现,cocos内可以cmyk转rgb吗,急求解决方案啊

来求问一下官方,有没有方法把cmyk的图像模式在客户端转化成rgb模式,目前有用户上传的头像色彩空间为cmyk模式,后端那边因为图床数据无法变更,所以后端无法处理。只能前端处理。
目前在开发一个项目,包含8个头像数据,目前基本所有头像数据都可以按照官方提供的方法loadRmote的方式加载出来,但是有一张头像图片我检查发现是cmyk模式的色彩空间,在ios13设备上永远无法展示,但是在android,pc和ipad上都可以展示,目前卡在这里3天了,希望官方能够帮忙看看这个问题要怎么解决。我这边打一个空包,然后把这个用户头像设置成spriteframe,然后用ios13 safari手机扫码打开,就是加载不出来,目前除了这个问题之外,还会影响到游戏内模型加载不出来,可能底层报错了,但是在业务层看不到。实在是不知道该如何处理了。

急求官方大大帮忙看看啊,这边实在是十万火急

一般头像都不能自己上传,用的微信QQ头像,他们都是自己转的png

我这边不是微信小游戏,我们是做直播平台的,目前没有办法让后端去更改这个问题,只能前端来修改,很特痛,所以还是想问问有没有好一点的办法,把cmyk模式修改成rgb色彩空间,又或者有其他办法能让ios13兼容展示这种类型的图片,急求解决方案啊,我这边卡这个问题卡了几天了,实在找不到更好的办法了,只好来求助官方

求助官方大大给一些意见啊,十万火急啊

武断的想了下,如果要改代码,那么要做的事
1.判断是否为cmyk
2.如果是,根据公式转换成rgb
原生的话建议在引擎里用gl处理,setImage那里貌似

gist.github.com

思路是这个思路,我这边也是这么去想的。但是都是问题,怎么判断图片是cmyk模式。我这边也是没有找到很好的方案,而且这个是通过loadRemote的方式远程下载的头像数据,如何把图片像素每个读取出来,也是麻烦事。不过如果有办法能判断图片是否为cmyk模式,可能可以做一些算是异常处理。但是目前还是卡在这里。

文件都有文件头的,你根据PNG图片的文件格式,解析出来,再做进一步的解析和转换,应该可以。但是我觉得只要提示用户,图片不符合格式,让用户自己去转换就可以了。

谢谢回复,我这边也找到了这个代码,但是还是得想办法把loadRemote出来的头像数据逐个像素取出来

老哥这个是个思路。不行的,我们是直播内游戏,原生端展示不会有问题,只有在webview上有问题

那你就只有自己转了 PNG文件格式详解 - maxiongying - 博客园 (cnblogs.com)

Exif.js 读取图像的元数据 - 前端开发仓库 (ciaoca.com)

我查了下2.4.3的C++引擎代码,Image::initWithJpgData函数里可以拿到jpeg_decompress_struct,这个info里有J_COLOR_SPACE标记是否为cmyk

谢谢大哥指点,但是目前只是wenview的端,目前还没有使用native相关的东西

我查默认的creater的engine代码里面确实没有找到相关的东西

这个判断在读取的时候用了trycatch,你也可以在展示错误来判断是不是rgb
Java判断图片是grb还是cmyk_karamay的专栏-CSDN博客

没有发生错误,就是不展示,然后我这边看还会影响到其他resources资源加载接口,比如我loadRemote这张头像,然后设置不成功,我在其他地方调用resources.load其他3d模型资源,3d模型也因此加载不成功。所以try catch没有用。我试试你刚贴的exif.js行不行

exif不行,只针对于拍摄的照片才会有效

2.4.x的js引擎解析纹理代码在parse.js的parseImage方法里