1

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

我想要一个新的:JBIG2

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

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

<img src=“path/to/myImage.jbig2”&gt;

或者

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 图形解码器的示例。我只是想我需要为 minetype image/jbig2注册一个钩子。

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

4

1 回答 1

2

是的,我认为您描述的解决方案大部分都可以工作,尽管您可能需要使用 a<embed src="..." type="image/jbig2">而不是<img>.

基本上,您将:

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