使用JavaScript从JPEG访问原始YUV值
我已将JPEG图像动态加载到2D html画布中,我希望访问原始YCbCr像素值 据我所知,JPEG在YCbCr中对像素数据进行编码,但chrome似乎在使用getImageData()访问时将其转换为RGB 我曾尝试使用RGB到YCbCr的转换计算,但这似乎是一种有损转换,因为它们不能完美地1:1映射 是否可以在JavaScript中访问原始YCbCr像素值?是和否 当浏览器使用本机方法(即图像元素)加载图像时,YCbCr(在JPEG的情况下)将由浏览器和ICC自动转换为RGB空间,支持该方法的浏览器将应用gamma校正 这意味着当图像加载并准备好使用时,它已经在RGB空间中(这是正确的,因为监视器是RGB)。画布在此过程中没有任何部分,始终包含像素作为RGBA。因此,当使用使用JavaScript从JPEG访问原始YUV值,javascript,canvas,jpeg,rgb,yuv,Javascript,Canvas,Jpeg,Rgb,Yuv,我已将JPEG图像动态加载到2D html画布中,我希望访问原始YCbCr像素值 据我所知,JPEG在YCbCr中对像素数据进行编码,但chrome似乎在使用getImageData()访问时将其转换为RGB 我曾尝试使用RGB到YCbCr的转换计算,但这似乎是一种有损转换,因为它们不能完美地1:1映射 是否可以在JavaScript中访问原始YCbCr像素值?是和否 当浏览器使用本机方法(即图像元素)加载图像时,YCbCr(在JPEG的情况下)将由浏览器和ICC自动转换为RGB空间,支持该方法
getImageData()
时,所有支持canvas的浏览器都将以RGBA的形式返回数据
访问原始YCbCr的唯一方法是自己对原始文件进行低级解析。您可以在任何可以迭代字节(包括JavaScript)的语言中执行此操作。对于JS,我建议使用类型化数组和数据视图来解析数据,但要注意:这很乏味,而且容易出错(因为它本身就是一个完整的项目),但如果您绝对需要原始数据,则完全可以这样做
另一种方法是将RGB转换回YCbCr,但色度和上述颜色和伽马校正可能会影响结果,使其与原始原始数据(以任何方式都是压缩形式)不完全相同。您还可以使用canvas元素上的
toDataURL()
方法将画布导出为JPEG。我知道这是一个非常老的问题,但希望提供更新,直接从YUV平面对一些JPEG和WebP图像进行Chrome处理。您必须启用GPU光栅化(并禁用金属),有时可能需要从启用该功能chrome://flags
您可以运行跟踪,解码图像,包括闪烁类别,并查看是否有任何事件弹出进行YUV解码。如果是这样的话,那么您可以尝试从JavaScript直接访问YUV平面,尽管我承认我怀疑这是否会开箱即用(出于管道/安全原因) 我决定使用JavaScript JPEG解压库来访问原始YUV组件。明确地