对于我的图像压缩,我使用枕头库来获取 rgb 中的每个像素(例如:(100, 0, 200)。使用霍夫曼编码我已经转换为二进制以减少位数。现在,我有将位序列保存到文本或二进制文件中。压缩文件始终比原始文件小,但现在,我的 txt 文件比原始文件大。我该怎么办?之后如何读取文件并解压。这是一个指令:
你的代码应该读入一个图像文件,计算固定长度编码需要多少位,然后应用压缩算法来创建一个更小的编码——你需要实现压缩,你不能使用压缩库。您应该输出以压缩格式存储图像所需的位数以及实现的压缩率。在保存压缩图像时,您将无法将其保存为标准图像格式,因为您将创建自己的编码,但您可以将位序列保存到文本或二进制文件中。
您的代码还应该能够提示用户输入包含压缩位序列的文本文件的文件名,然后将该文件解压缩为原始图像——您可以假设该文件使用与您上次压缩的文件相同的压缩格式. 因此,例如,如果您将 pacificat.bmp 压缩为存储在 pacificat.txt 中的一系列位,然后用户要求您解压缩 alt_encode.txt,您可以假设 alt_pacificat.txt 使用与 encode.txt 相同的压缩数据结构(例如,它可能是原始图像数据的子集)。
有许多库可以帮助您将格式化的数据从 Python 存储到文件中。如果您研究选项并找到一种方法将您的压缩数据结构存储到文件中,以便用户可以选择位文件和数据结构文件并使用数据结构解压缩位文件
只需使用我当前的图像:flag2.bmp
这是我的代码
from PIL import Image
import sys, string
import copy
import time
codes = {}
def sortFreq (freqs) :
letters = freqs.keys()
tuples = []
for let in letters :
tuples.append((freqs[let],let))
tuples.sort()
return tuples
def buildTree(tuples) :
while len(tuples) > 1 :
leastTwo = tuple(tuples[0:2]) # get the 2 to combine
theRest = tuples[2:] # all …Run Code Online (Sandbox Code Playgroud) 我有这样的清单
[255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 127, 0, 255, 127, 0, 255, 127, 0, 255, 127, 0, 255, 127, 0, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255]
Run Code Online (Sandbox Code Playgroud)
什么是转换成3对(rgb)的最佳方法,里面是元组
pixel = [(255,0,0),(255,0,0),(255,0,0),(255,0,0),(127,0,255),(127,0,255),(127,0,255),(127,0,255),(127,0,255),(0,127,255),(0,127,255),(0,127,255),(0,127,255),(0,127,255),(0,127,255),(0,127,255)]
Run Code Online (Sandbox Code Playgroud)