Python 通过算术编码处理压缩图像的最佳方法是什么?
我一直在Python 通过算术编码处理压缩图像的最佳方法是什么?,python,node.js,image-compression,Python,Node.js,Image Compression,我一直在node js中进行一个项目,用于压缩.txt文件。到目前为止,我已经通过使用算术编码对数据进行编码和解码成功实现了这一目标,但现在我想使用该代码对图像进行压缩,但我不知道如何做到这一点。我的主要问题是如何从图像中读取数据进行压缩。我一点也不知道如何使用缓冲区,流,甚至是Blob(有时通过搜索感兴趣的论文是可能的方法) 我知道在Python中处理图像非常容易,所以我想用Python编写脚本来读取图像。因为刚才我没有集成Python和Node js,这将是后面的步骤 我对一些python库
node js
中进行一个项目,用于压缩.txt
文件。到目前为止,我已经通过使用算术编码
对数据进行编码
和解码
成功实现了这一目标,但现在我想使用该代码对图像进行压缩,但我不知道如何做到这一点。我的主要问题是如何从图像中读取数据进行压缩。我一点也不知道如何使用缓冲区
,流
,甚至是Blob
(有时通过搜索感兴趣的论文是可能的方法)
我知道在Python
中处理图像非常容易,所以我想用Python
编写脚本来读取图像。因为刚才我没有集成Python
和Node js
,这将是后面的步骤
我对一些python
库(如opencsv
和pill(PIL)
)有一些小小的经验。到目前为止,我已经使用cv2.imread()
函数读取图像并将其作为二进制文件存储在.txt
文件中。到目前为止,我还没有将它与节点js
集成
from cv2 import cv2
img1 = cv2.imread('cat.png',0)
with open("cat.txt", 'wb') as out:
out.write(img1.tobytes())
const fs = require("fs");
let data = fs.readFileSync('Cat.png', 'binary');
fs.writeFileSync('Cat_Copy.png', data, 'binary');
现在我使用cat.txt
文件,通过node js
中的fs
读取数据,然后对其进行压缩和解压缩
通过算术编码
现在转到主要问题:
当我在python
中读取图像并将其存储在cat.txt
中时,它的大小比cat.png
文件大得多。即使在压缩了cat.txt
文件后,压缩后的cat.txt
也比cat.png
大
cat.png
=242kb,cat.txt(压缩前)
=971kb,compressed\u cat.txt(压缩后)
=251kb
我认为我读取或存储的文件不正确。我不知道如何克服那个问题
需要一些额外的帮助
- 是否有任何方法可以像在
python
中一样在node js
中处理图像,这样我以后就不需要集成它了。我尝试了Multer
和Jimp
,但在其中找不到类似python open csv
- 我不知道压缩后如何存储数据,因为大部分数据存储在
.zip
或.rar
中。我从未以那种格式存储/读取数据
我没有完整的答案,但我认为以下信息会有所帮助-
诸如.png、.jpg等图像格式已经以压缩格式表示图像。有些是无损耗的,但最常用的存储是有损耗的,以最小化大小。所以,老实说,我怀疑任何文本压缩算法都不能击败现有的图像压缩格式
我认为你的方法有一个错误,那就是用开放式简历阅读图片。如果我没弄错的话,它会给你一个图像的多维数组表示。如果您想使用图像,这很好,但我认为您只需要直接从图像文件中读取字节,这样您就可以将其转换回原始图像文件。现在,如何处理字节或底层位取决于您。我希望这能部分回答你的问题。我在寻找错误的解决方案。但是注释帮助了
,我认为您只需要直接从图像文件中读取字节,这样您就可以将其转换回原始图像文件。
我做了两大改变
首先是读取图像的方法。
我不需要python
来读/写图像,因为它可以在节点js
中轻松完成
from cv2 import cv2
img1 = cv2.imread('cat.png',0)
with open("cat.txt", 'wb') as out:
out.write(img1.tobytes())
const fs = require("fs");
let data = fs.readFileSync('Cat.png', 'binary');
fs.writeFileSync('Cat_Copy.png', data, 'binary');
第二次选择要压缩的正确文件
大部分.jpeg
、.jpg
和.png
已经被压缩,因此普通的压缩技术对它们不起作用。但是.tiff
文件没有被压缩,至少我的算法可以使用这种格式。不过,它的效率不是很高
第三,选择正确的格式保存压缩文件
这不是一个大问题,因为我们可以保存它而不需要任何扩展
真正重要的是保存它的编码。在js
ucs2
中,井占用的磁盘空间比utf8
少。我将其保存为filename.ac
,因为它表示算术编码