如何在Chrome浏览器中编写新的图像格式解码器

时间:2014-05-13 15:17:08

标签: google-chrome google-nativeclient jbig2

浏览器对图像格式的支持很差。实际上只支持GIF,JPG,PNG和WebP。

我想要一个新的:JBIG2

从最终用户的角度来看,他只会下载并安装Chrome扩展程序,他的浏览器将能够解码新的图像格式。

从Web开发人员的角度来看,新格式将是透明的,并与标记img,canvas和css兼容。为了显示JBIG2图像,他仍然使用:

<img src=“path/to/myImage.jbig2”>

var myImage = new Image();
myImage.addEventListener( 'load', function() {
    // insert in canvas, when image is loaded
});
myImage.src = 'path/to/myImage.jbig2';

.my-class {
    background-image: url( “path/to/myImage.jbig2”);
}

问题不在于解码器本身。我预见到使用用C语言编写的JBig2dec

问题是如何实现新的图像解码器? 在Chrome中,当我们必须运行C代码时,最佳解决方案是使用Native Client Extension

更好的是,我可以阅读这个NaCl网页:

  

图形,音频等等:运行本机代码模块,可呈现2D和3D图形,播放音频,响应鼠标和键盘事件,在多个线程上运行,以及直接访问内存要求用户安装插件。

     

多媒体应用程序:可以在Native Client模块中将用于处理声音,图像和影片的编解码器添加到浏览器中。

但遗憾的是,没有任何文档可用于实现2D图形解码器。我猜我需要register an hook for the minetype image / jbig2。

有人知道如何使用NaCl实现新的图像格式解码器吗?

1 个答案:

答案 0 :(得分:2)

是的,我认为您所描述的解决方案大部分都有效,但您可能需要使用<embed src="..." type="image/jbig2">代替<img>来加载图片。

基本上,你会:

  1. 使用Native Client SDK
  2. 编译JBig2解码器
  3. 添加PPAPI插件入口点。请参阅NaCl SDK或教程here中的任何示例。
  4. 在派生的Instance类中,实现虚函数HandleDocumentLoad。当Native Client插件用作mimetype加载器时,将调用此函数。您可以使用传递的URLLoader对象来读取您的JBig2文件。
  5. 创建2D graphics context,并在其中显示已解码图像的内容。看一下NaCl SDK中的Graphics2D示例(examples / api / graphics2d)。
  6. 制作一个Chrome extension,将自己注册为JBig2 Native Client mimetype handler(正如您已经找到的那样)。