我在webgl中使用图像作为纹理,它需要知道图像的格式,主要是RGB或RGBA。所以给定一个通过XMLHttpRequest获得的Image(),我可以找出它有多少个频道吗?
我意识到我可以通过将其转换为2D Canvas然后将其重新格式化为webgl来摆弄它,但我想避免这种情况。
答案 0 :(得分:1)
不,除了绘制画布并检查每个像素或编写自己的图像加载器并读取标题和像素之外,没有办法知道
除了检查除少数情况外的所有像素外,问题无法解决。
JPG是RGB,所以如果JPG则没有alpha。
当然,您只能通过基于URL的猜测来了解它是否是JPG。因为即使URL是" .jpg"如果服务器发送标题"内容类型:image / png"然后浏览器会将该文件解释为PNG。如果您提供了所有文件,那么您就知道了。
如果它是PNG,您可以使用代码来读取标题
这会很糟糕,因为你最终会两次下载文件。一旦浏览器将其转换为图像。另一个XHR请求将数据下载为二进制文件,以便您可以读取标题。也许如果你很幸运,浏览器只会下载一次并从缓存中提供第二个副本。
但是,即使你这样做,只是因为标题说有一个alpha通道并不意味着100%的alpha通道不是255(1.0)。
即使图像具有Alpha通道,它们也不会始终用作Alpha通道。
在Alpha通道中放置高度贴图或光泽贴图或反射贴图或发光贴图是很常见的。这是非常具体的应用程序。
如果我是你,我不会尝试查看alpha频道。我要么假设所有图像都有alpha。或者我让我的艺术家通过文件名或其他元数据明确地标记图像的使用方式。