JavaScript 无损图像压缩

3
我正在寻找一种在浏览器(JavaScript)中将bmp图像编码为tiff或其他标准压缩但无损格式的方法。我猜如果情况变得最糟,我可以自己编写库(从画布元素获取数据),但我希望:要么有更好的方法来完成它,要么已经有人编写了类似的东西(我找不到库)。
我有用户想要上传大约4MB(8位单色)的bmp文件,我可以使用LZW对其进行无损压缩,使其大小减小到约700KB的tiff文件(甚至更好的是约300KB的无损JPEG-2000)。我希望在上传文件之前就完成这个过程,以节省传输成本/时间。
在你问之前,我并不是在关注使用高比特率的JPEG而不是无损编码。这些是用于分析的天文照片,不能处理引入任何压缩伪影的情况。
谢谢, Jonny

2
压缩图像时,你不会得到无损的图像。 - Starx
@Starx - 这取决于压缩的类型。例如,作为一个简单的例子,你可以将一个bmp文件进行压缩,然后解压缩并恢复原始文件。 - jjh
1
我猜你可能见过jsZip - Lee
1
我认为这是一个很好的想法,但在文件上传之前,你不能通过JavaScript在浏览器中访问他们计算机上的文件。你可以使用Java或Flash之类的语言来实现,但JavaScript无法做到。即使尝试从文件上传输入中读取文本,也无法通过JavaScript完成。 - dontangg
您可以在现代浏览器中使用JS访问文件(FileReader)。请参考下面的答案。我认为我可以通过使用canvas元素获得的PNG压缩来实现我想要的(几乎所有)功能,在Chrome上效率高。 - jjh
2个回答

2
使用PNG格式,它是无损的并使用zlib压缩。甚至有像pngcrush这样的程序可以优化图像大小(唯一的问题是这需要一段时间)。
你为什么要使用JavaScript来处理这个过程?如果你在Java applet中完成这个过程(使用一个与java.awt.Image类交互的库),或者上传到一个处理图像并返回压缩图像的服务器上,长期来看会更容易些。
编辑:请不要使用Java applet,因为该技术已经不再得到很好的支持。

Java applets似乎越来越不常见了。PNG建议似乎很有帮助,尽管它对高色彩空间图片并不优化,但实际上似乎运行良好。 - jjh
1
我也不想上传到服务器,因为这样会花费太长时间。 - jjh
1
此外,Java小程序在跨浏览器方面并不如JavaScript。它们只能在一些桌面浏览器上运行,而JavaScript则可以在任何地方运行。而且,通过现代的JIST编译技术,JavaScript的速度可能与Java一样快(甚至更快)。 - user7892745

1

如果你想尝试一些新的东西,可以试试我创建的新的无损压缩算法;通过Java小程序,可以在浏览器中查看压缩后的图像。你可以使用Javascript来触发小程序的加载,或者直接操作Java代码(该程序是开源的)。对于许多图像来说,压缩比将优于无损JPEG 2000。网站地址为http://www.researchandtechnology.net/bcif/

如果你想使用一些知名的标准,那么我同意amphetamachine的建议:使用PNG是最好的选择。

祝好, Stefano


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接