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

武断的想了下,如果要改代码,那么要做的事
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方法里

跟下载应该没有关系,因为我发现用loadRemote下载下来之后,返回的结果是正常的,应该是底层imageAsset转化成Texture2d的时候出现了一些问题,一直卡在那里或者底层报错了,导致影响了其他的资源load的过程也受到影响。目前感觉没有什么好的办法了,太头疼了

求官方大佬帮忙看看啊,有没有什么方案让这种类型的图片展示出来,或者再次一点捕获到这种类型的图片也行啊,太头痛了

写个shader 去网上找 xmyk 转 rgba 的公式,自己转?

思路是这个思路,但是实现上还是有难度的,感觉解决不了了

让后端存储图片到图床之前,使用 ImageMagick 转到 RGB 颜色空间,这样就能避免这个问题了, 已经传上去的让后端也转一下,更新下图床链接