通过算术编码处理图像压缩的最佳方法是什么?
what is the best way to deal with a image for compression by Arithmetic coding?
我一直在 node js
进行一个压缩 .txt
文件的项目。到目前为止,我已经通过对 encoding
和 decoding
数据使用 Arithmetic coding
成功实现了该目标,但现在我想使用该代码来压缩图像,但我不知道如何实现要做到这一点。我的主要问题是我应该如何从图像中读取数据进行压缩。我完全不知道如何使用 Buffer
、 stream
甚至 Blob
来做到这一点(通过有时搜索兴趣论文是可能的方法)。
我知道在 Python
中处理图像非常容易,所以我虽然制作了脚本来使用 python
读取图像。目前我还没有整合 Python
和 Node js
这将在后面的步骤中进行。
我对某些 python
库(如 open-csv
和 Pillow (PIL)
的经验很少。到目前为止,我已经使用 cv2.imread()
函数读取图像并将其作为 binary
存储在 .txt
文件中。至于现在我还没有将它与 Node js
.
集成
from cv2 import cv2
img1 = cv2.imread('cat.png',0)
with open("cat.txt", 'wb') as out:
out.write(img1.tobytes())
现在我使用 cat.txt
文件并通过 fs
在 node js
中读取该数据然后压缩和解压缩它
通过 Arithmetic coding
.
现在主要问题:
When i read image in python
and store it in cat.txt
it's size is quite bigger than cat.png
file. Even such that after compressing that cat.txt
file the resultant compressed_cat.txt
is bigger than that of cat.png
.
cat.png
= 242kb, cat.txt(before compression)
= 971kb, compressed_cat.txt(after compression)
= 251kb
我想我正在错误地读取或存储文件。我不知道如何克服这个问题。
需要一些额外的帮助
- 有没有什么方法可以像
python
那样处理 node js
中的图像,这样我以后就不需要集成它了。我试过 Multer
和 Jimp
但我找不到像 python open-csv
这样的东西
- 而且我不知道如何在压缩后存储数据,因为大部分数据都存储在
.zip
或 .rar
中。我从来没有stored/read数据in/form那种格式。
我没有完整的答案,但我认为以下信息会有所帮助 -
.png、.jpg 等图像格式已经以压缩格式表示图像。有些不是有损的,但最常用于存储的是有损的以最小化尺寸。所以,老实说,我怀疑任何文本压缩算法都可以击败现有的图像压缩格式。
我认为您的方法有一个错误是使用 open-cv 读取图像。如果我没记错的话,它会为您提供图像的 multi-dimentional 数组表示形式。如果你想使用图像,那很好,但我认为你只想直接从图像文件中读取字节,这样你就可以将它转换回原始图像文件。现在,您如何使用字节或底层位取决于您。我希望这能回答您的部分问题。
我在寻找解决方案的方向错误。但是 评论帮助了 I think you just want to read the bytes from image file directly, so you can convert it back to the original image file
。
我做了 2 大改变
首先是读图方式
我不需要 python
到 read/write 图像,因为它可以在 node-js
中轻松完成。
const fs = require("fs");
let data = fs.readFileSync('Cat.png', 'binary');
fs.writeFileSync('Cat_Copy.png', data, 'binary');
第二次选择要压缩的正确文件
Mostly .jpeg
, .jpg
and .png
are already compressed so normal compression techniques does not work on them. But .tiff
files are not compressed and at least my algorithm works on this format. Still it is not very efficient.
第三选择正确的格式保存压缩文件
Well that was not a big problem as we can save it without any extension
what does really matters is the encoding in which it is saved. Well in js
ucs2
takes less space on disk than utf8
. I am saving it as filename.ac
as it represents Arithmetic Coding
.
我一直在 node js
进行一个压缩 .txt
文件的项目。到目前为止,我已经通过对 encoding
和 decoding
数据使用 Arithmetic coding
成功实现了该目标,但现在我想使用该代码来压缩图像,但我不知道如何实现要做到这一点。我的主要问题是我应该如何从图像中读取数据进行压缩。我完全不知道如何使用 Buffer
、 stream
甚至 Blob
来做到这一点(通过有时搜索兴趣论文是可能的方法)。
我知道在 Python
中处理图像非常容易,所以我虽然制作了脚本来使用 python
读取图像。目前我还没有整合 Python
和 Node js
这将在后面的步骤中进行。
我对某些 python
库(如 open-csv
和 Pillow (PIL)
的经验很少。到目前为止,我已经使用 cv2.imread()
函数读取图像并将其作为 binary
存储在 .txt
文件中。至于现在我还没有将它与 Node js
.
from cv2 import cv2
img1 = cv2.imread('cat.png',0)
with open("cat.txt", 'wb') as out:
out.write(img1.tobytes())
现在我使用 cat.txt
文件并通过 fs
在 node js
中读取该数据然后压缩和解压缩它
通过 Arithmetic coding
.
现在主要问题:
When i read image in
python
and store it incat.txt
it's size is quite bigger thancat.png
file. Even such that after compressing thatcat.txt
file the resultantcompressed_cat.txt
is bigger than that ofcat.png
.
cat.png
= 242kb,cat.txt(before compression)
= 971kb,compressed_cat.txt(after compression)
= 251kb
我想我正在错误地读取或存储文件。我不知道如何克服这个问题。
需要一些额外的帮助
- 有没有什么方法可以像
python
那样处理node js
中的图像,这样我以后就不需要集成它了。我试过Multer
和Jimp
但我找不到像python open-csv
这样的东西
- 而且我不知道如何在压缩后存储数据,因为大部分数据都存储在
.zip
或.rar
中。我从来没有stored/read数据in/form那种格式。
我没有完整的答案,但我认为以下信息会有所帮助 -
.png、.jpg 等图像格式已经以压缩格式表示图像。有些不是有损的,但最常用于存储的是有损的以最小化尺寸。所以,老实说,我怀疑任何文本压缩算法都可以击败现有的图像压缩格式。
我认为您的方法有一个错误是使用 open-cv 读取图像。如果我没记错的话,它会为您提供图像的 multi-dimentional 数组表示形式。如果你想使用图像,那很好,但我认为你只想直接从图像文件中读取字节,这样你就可以将它转换回原始图像文件。现在,您如何使用字节或底层位取决于您。我希望这能回答您的部分问题。
我在寻找解决方案的方向错误。但是 I think you just want to read the bytes from image file directly, so you can convert it back to the original image file
。
我做了 2 大改变
首先是读图方式
我不需要 python
到 read/write 图像,因为它可以在 node-js
中轻松完成。
const fs = require("fs");
let data = fs.readFileSync('Cat.png', 'binary');
fs.writeFileSync('Cat_Copy.png', data, 'binary');
第二次选择要压缩的正确文件
Mostly
.jpeg
,.jpg
and.png
are already compressed so normal compression techniques does not work on them. But.tiff
files are not compressed and at least my algorithm works on this format. Still it is not very efficient.
第三选择正确的格式保存压缩文件
Well that was not a big problem as we can save it
without any extension
what does really matters is the encoding in which it is saved. Well injs
ucs2
takes less space on disk thanutf8
. I am saving it asfilename.ac
as it representsArithmetic Coding
.