【问题标题】:How to write a new image format decoder in Chrome Browser如何在 Chrome 浏览器中编写新的图像格式解码器
【发布时间】:2014-05-13 15:17:07
【问题描述】:

浏览器对图像格式的支持很差。实际上只支持 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 minetypeimage/jbig2。

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

【问题讨论】:

  • 根据文档“用于处理的编解码器声音、图像和电影可以在本地客户端模块中添加到浏览器”,NaCl 用于构建编解码器。但据我所知,缺少图形编解码器的文档和示例。完美的解决方案实际上是在 NaCl 中实现一个图像解码器,并让浏览器照常渲染。

标签: google-chrome google-nativeclient jbig2


【解决方案1】:

是的,我认为您描述的解决方案大部分都可以工作,但您可能需要使用&lt;embed src="..." type="image/jbig2"&gt; 而不是&lt;img&gt; 来加载图像。

基本上,你会:

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

【讨论】:

  • 感谢您的回答,但这并不是我所需要的。这可能是一种解决方法。我同意你的所有 5 点,除了 4 点。我不想创建一个新的 2D 图形上下文,在网页中制造一种“洞”。我想保留 Web 开发人员的 2D 上下文(画布),因为他可以使用像 KineticJS 这样的高级 Canvas 框架。第 4 点应该是:“将解码后的图像数据提供给浏览器以构建他的 Image 对象”。但是怎么做呢?
  • 我想我对第 4 点使用 communication between Javascript and NaCl modules 有一个解决方法,但它只解决了 Javascript 功能,而不是 html 和 css 调用,并且 Web 开发人员没有相同的代码来加载本机格式图像和 JBig2。
猜你喜欢
  • 2013-04-14
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多