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
      ,因为它表示
      算术编码