From 4ca611e71ede7b14953b104c7f0d0fe76e897002 Mon Sep 17 00:00:00 2001 From: VGoncalo Date: Fri, 27 Mar 2026 15:39:34 +0000 Subject: [PATCH 1/1] second version delivered to teacher --- .DS_Store | Bin 0 -> 6148 bytes .idea/.gitignore | 5 + .idea/ccd-projecto-61609&57098&70323.iml | 8 + .idea/inspectionProfiles/Project_Default.xml | 12 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + arithmetic.py | 16 + calculo_entropia.py | 60 +++ huffman.py | 18 + lz78/lz_78.py | 140 +++++++ lz78/lz_78_2x2.py | 90 ++++ lz78/lz_78_rle.py | 102 +++++ lz78/lz_78_xor.py | 189 +++++++++ main.py | 42 ++ pixel_character.pbm | 50 +++ readme.txt | 24 ++ "relat\303\263rio.pdf" | Bin 0 -> 259584 bytes "taxa_compress\303\243o.py" | 40 ++ tetris_example.pbm | 7 + utils.py | 392 ++++++++++++++++++ 21 files changed, 1213 insertions(+) create mode 100644 .DS_Store create mode 100644 .idea/.gitignore create mode 100644 .idea/ccd-projecto-61609&57098&70323.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 arithmetic.py create mode 100644 calculo_entropia.py create mode 100644 huffman.py create mode 100644 lz78/lz_78.py create mode 100644 lz78/lz_78_2x2.py create mode 100644 lz78/lz_78_rle.py create mode 100644 lz78/lz_78_xor.py create mode 100644 main.py create mode 100644 pixel_character.pbm create mode 100644 readme.txt create mode 100644 "relat\303\263rio.pdf" create mode 100644 "taxa_compress\303\243o.py" create mode 100644 tetris_example.pbm create mode 100644 utils.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..92c1a9b636978da5f9d33870b0df0c164bec06f7 GIT binary patch literal 6148 zcmeHKy-EW?5T4O14s23d?h}Zqv)L}y_4o1LGXyAN*nhKP7}w;B_Th^WL6WKjl0%!9523l=BK9?g0@zv|k}z$U-d zB+p*Z39addZu95AeD3?&uCA9&w}h>Hob2y+yO(M1Uw!M}T=%%)Q>3D9Lt8qd^Sth4 z-}m+F62;f22ditjZTDGs$e-1vh17L%2AlzBz!~`84B*ZdDUTF=b_SdQXW)YYIUfRs zU}YE;)6sz`wE(~Z<|NRimyn!bSQ$n|cp$8)Kuu+9F<8@K4;EJ$Mnz30w&sJa@_X~b zsXF!#DV(@c^w}A3266@tbvcsz{{o-PV3VJx_{te@2L2cWT-5V=hL^It^~>wYT^leK s7$OoEMS(!iegd$NbL2QV)gMGhTxA#)Wf!rhbfEtTBtm?027Z8nH?K=XN&o-= literal 0 HcmV?d00001 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/ccd-projecto-61609&57098&70323.iml b/.idea/ccd-projecto-61609&57098&70323.iml new file mode 100644 index 0000000..1314836 --- /dev/null +++ b/.idea/ccd-projecto-61609&57098&70323.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..e4e6bff --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..aaf65ba --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..a15c890 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/arithmetic.py b/arithmetic.py new file mode 100644 index 0000000..d9b1968 --- /dev/null +++ b/arithmetic.py @@ -0,0 +1,16 @@ +import utils +import sys + +_opt_type = sys.argv[1] +_file_path = sys.argv[2] + +_file = utils.get_file(_file_path) + + +if _opt_type == "c": + _pbm_content = utils.BitMapFile(_file) + _, _result_option_2 = utils.arithmetic_encode_image(_pbm_content) + print(_result_option_2) +elif _opt_type == "d": + _result = utils.arithmetic_decode_file(_file_path) + print(_result) \ No newline at end of file diff --git a/calculo_entropia.py b/calculo_entropia.py new file mode 100644 index 0000000..321cd44 --- /dev/null +++ b/calculo_entropia.py @@ -0,0 +1,60 @@ +import math +import sys + +def calcular_entropia(bitstream): + n = len(bitstream) + if n == 0: return 0 + + p0 = bitstream.count('0') / n + p1 = bitstream.count('1') / n + + entropia = 0 + for p in [p0, p1]: + if p > 0: + entropia -= p * math.log2(p) + return entropia + +def calcular_entropia_condicional(bitstream): + transicoes = {'00': 0, '01': 0, '10': 0, '11': 0} + contagem_base = {'0': 0, '1': 0} + + for i in range(len(bitstream) - 1): + par = bitstream[i:i+2] + transicoes[par] += 1 + contagem_base[bitstream[i]] += 1 + + h_condicional = 0 + for base in ['0', '1']: + p_base = contagem_base[base] / (len(bitstream) - 1) + if p_base > 0: + h_local = 0 + for prox in ['0', '1']: + p_transicao = transicoes[base + prox] / contagem_base[base] + if p_transicao > 0: + h_local -= p_transicao * math.log2(p_transicao) + h_condicional += p_base * h_local + + return h_condicional + +def clean_image_data(image_data): + + clean_text = "" + + for line in image_data: + line = line.strip() + line = line.replace(" ", "") + if not line or line.startswith('#'): + continue + clean_text += line + + return clean_text + +with open(sys.argv[1], "r") as image: + lines = image.readlines() + image_data = clean_image_data(lines[2:]) + + h_x = calcular_entropia(image_data) + h_condicional = calcular_entropia_condicional(image_data) + + print(f"Entropia: {h_x:.4f} bits/pixel") + print(f"Entropia Condicional: {h_condicional:.4f} bits/pixel") \ No newline at end of file diff --git a/huffman.py b/huffman.py new file mode 100644 index 0000000..c4442f5 --- /dev/null +++ b/huffman.py @@ -0,0 +1,18 @@ +import utils +import sys + +_opt_type = sys.argv[1] +_file_path = sys.argv[2] + + +if _opt_type == "c": + _file = utils.get_file(_file_path) + _pbm_content = utils.BitMapFile(_file) + _result = utils.huffman_encode_image(_pbm_content) + with open(sys.argv[2]+".bin", "wb") as file: + file.write(_result) + print(_result) +elif _opt_type == "d": + _result = utils.huffman_decode_file(_file_path) + with open(sys.argv[2].strip('.bin'), "w") as file: + file.write(_result) \ No newline at end of file diff --git a/lz78/lz_78.py b/lz78/lz_78.py new file mode 100644 index 0000000..28dd34c --- /dev/null +++ b/lz78/lz_78.py @@ -0,0 +1,140 @@ +import sys +import struct + +######################################################################################## +# python lz_78.py +# +# c: comprimir +# d: descomprimir +# +# Os ficheiros gerados ficarão na mesma pasta que o script +######################################################################################## + +def lz78_compression(image): + dictionary = { + 0: "" + } + + output = [] + + symbol = "" + + for i in image: + if (symbol + i) in dictionary.values(): + symbol += i + else: + if symbol == "": + output.append([0, i]) + dictionary[len(dictionary)] = i + else: + output.append([list(dictionary.keys())[list(dictionary.values()).index(symbol)], i]) + dictionary[len(dictionary)] = symbol + i + symbol = "" + + if symbol != "": + idx = list(dictionary.keys())[list(dictionary.values()).index(symbol)] + output.append([idx, ""]) + + return output, dictionary + +def lz78_decompression(compressed_image): + dictionary = { + 0: "" + } + + output = "" + + for i in compressed_image: + output += dictionary.get(i[0]) + i[1] + dictionary[len(dictionary)] = dictionary.get(i[0]) + i[1] + + return output + +def clean_image_data(image_data): + + clean_text = "" + + for line in image_data: + line = line.strip() + line = line.replace(" ", "") + if not line or line.startswith('#'): + continue + clean_text += line + + return clean_text + +def chunkstring(string, length): + return [string[i : length+i] for i in range(0, len(string), length)] + +#Comprimir +if sys.argv[1] == "c": + + with open(sys.argv[2], "r") as image: + lines = image.readlines() + image_size = lines[1] + + if lines[0].strip() != 'P1': + raise ValueError("This is not a pbm file") + + clean_text = clean_image_data(lines[2:]) #Limpa os espaços em branco para comprimir melhor + + output, dic = lz78_compression(clean_text) + + print(f"Output: {output}\n") + print(f"Dictionary: {dic}") + + #Compressão em texto (human-readable) + with open(sys.argv[2] + "_compressed", "w") as save_file: + save_file.write(f"{output} \n{image_size}") + + #Compressão em binário (compressão "a sério") + with open(sys.argv[2] + ".bin", "wb") as save_file: + largura = int(image_size.split()[0]) + altura = int(image_size.split()[1]) + save_file.write(struct.pack('II', largura, altura)) + + for indice, simbolo in output: + simbolo_byte = ord(simbolo) if simbolo != "" else 0 + save_file.write(struct.pack('HB', indice, simbolo_byte)) +#Descomprimir +elif sys.argv[1] == "d": + + #Descomprimir do ficheiro de texto + with open(sys.argv[2] + "_compressed", "r") as image: + lines = image.readlines() + + compressed_image = eval(lines[0]) + image_size = lines[1] + length = int(lines[1].split(" ")[0]) + + output = lz78_decompression(compressed_image) + + chuncked_output = chunkstring(output, length) + + with open(sys.argv[2] + "_decompressed", "w") as save_file: + save_file.write(f"P1\n{image_size}") + for line in chuncked_output: + save_file.write(f"{line}\n") + + #Descomprimir do binário + with open(sys.argv[2] + ".bin", "rb") as image: + header = image.read(8) + largura, altura = struct.unpack('II', header) + + compressed_image_bin = [] + while True: + chunk = image.read(3) + if not chunk: + break + indice, simbolo_byte = struct.unpack('HB', chunk) + simbolo = chr(simbolo_byte) if simbolo_byte != 0 else "" + compressed_image_bin.append([indice, simbolo]) + + output = lz78_decompression(compressed_image_bin) + + chuncked_output = chunkstring(output, largura) + + with open(sys.argv[2]+ "_bin_decompressed", "w") as save_file: + save_file.write(f"P1\n{largura} {altura}\n") + for line in chuncked_output: + save_file.write(f"{line}\n") diff --git a/lz78/lz_78_2x2.py b/lz78/lz_78_2x2.py new file mode 100644 index 0000000..47aa2c8 --- /dev/null +++ b/lz78/lz_78_2x2.py @@ -0,0 +1,90 @@ +import sys +import struct + +######################################################################################## +# Apenas comprimir +# +# python lz_78_2x2.py +# +# +# Os ficheiros gerados ficarão na mesma pasta que o script +######################################################################################## + +def lz78_compression(image): + dictionary = {0: ""} + output = [] + symbol = "" + + for i in image: + if (symbol + i) in dictionary.values(): + symbol += i + else: + if symbol == "": + output.append([0, i]) + dictionary[len(dictionary)] = i + else: + idx = list(dictionary.keys())[list(dictionary.values()).index(symbol)] + output.append([idx, i]) + dictionary[len(dictionary)] = symbol + i + symbol = "" + + if symbol != "": + idx = list(dictionary.keys())[list(dictionary.values()).index(symbol)] + output.append([idx, ""]) + + return output, dictionary + +def clean_image_data(image_data): + clean_text = "" + for line in image_data: + line = line.strip().replace(" ", "") + if not line or line.startswith('#'): + continue + clean_text += line + return clean_text + +def chunkstring(string, length): + return [string[i : length+i] for i in range(0, len(string), length)] + +def get_blocks(bitstream, largura, altura): + matriz = [bitstream[i*largura:(i+1)*largura] for i in range(altura)] + # Padding + if largura % 2 != 0: + matriz = [linha + '0' for linha in matriz] + largura += 1 + if altura % 2 != 0: + matriz.append('0' * largura) + altura += 1 + + blocos = [] + for r in range(0, altura, 2): + for c in range(0, largura, 2): + bloco = matriz[r][c] + matriz[r][c+1] + matriz[r+1][c] + matriz[r+1][c+1] + blocos.append(bloco) + return blocos, largura, altura + + +with open(sys.argv[1], "r") as image: + lines = image.readlines() + image_size = lines[1].split() + + if lines[0].strip() != 'P1': + raise ValueError("This is not a pbm file") + + largura_orig = int(image_size[0]) + altura_orig = int(image_size[1]) + + clean_text = clean_image_data(lines[2:]) + + image_blocks, largura_pad, altura_pad = get_blocks(clean_text, largura_orig, altura_orig) + + output, dic = lz78_compression(image_blocks) + + with open(sys.argv[1] + "_compressed", "w") as save_file: + save_file.write(f"{output}\n{largura_orig} {altura_orig} {largura_pad} {altura_pad}") + + with open(sys.argv[1] + ".bin", "wb") as save_file: + save_file.write(struct.pack('IIII', largura_orig, altura_orig, largura_pad, altura_pad)) + for indice, simbolo in output: + simbolo_val = int(simbolo, 2) if simbolo != "" else 16 + save_file.write(struct.pack('HB', indice, simbolo_val)) \ No newline at end of file diff --git a/lz78/lz_78_rle.py b/lz78/lz_78_rle.py new file mode 100644 index 0000000..261a376 --- /dev/null +++ b/lz78/lz_78_rle.py @@ -0,0 +1,102 @@ +import sys +import struct + +######################################################################################## +# Apenas comprimir +# +# python lz_78_rle.py +# +# +# Os ficheiros gerados ficarão na mesma pasta que o script +######################################################################################## + +def rle_transform(bitstream): + sequencia = [] + pixel_atual = '0' # Começa sempre com o pixel 0 conforme enunciado + contador = 0 + + for bit in bitstream: + if bit == pixel_atual: + if contador == 255: # Limite de 8 bits + sequencia.append(255) + sequencia.append(0) # Troço de 0 do outro pixel para continuar no mesmo [cite: 41] + contador = 1 + else: + contador += 1 + else: + sequencia.append(contador) + pixel_atual = bit + contador = 1 + sequencia.append(contador) + return sequencia + +def lz78_compression(image_data): + dictionary = {0: []} + output = [] + symbol = [] + + for i in image_data: + temp = symbol + [i] + dict_values = list(dictionary.values()) + if temp in dict_values: + symbol = temp + else: + if not symbol: + output.append([0, i]) + dictionary[len(dictionary)] = [i] + else: + idx = dict_values.index(symbol) + output.append([idx, i]) + dictionary[len(dictionary)] = symbol + [i] + symbol = [] + + if symbol: + idx = list(dictionary.values()).index(symbol) + output.append([idx, -1]) + return output + +def clean_image_data(image_data): + + clean_text = "" + + for line in image_data: + line = line.strip() + line = line.replace(" ", "") + if not line or line.startswith('#'): + continue + clean_text += line + + return clean_text + +def chunkstring(string, length): + return [string[i : length+i] for i in range(0, len(string), length)] + + +with open(sys.argv[1], "r") as image: + lines = image.readlines() + image_size = lines[1].split() + + if lines[0].strip() != 'P1': + raise ValueError("This is not a pbm file") + + clean_text = clean_image_data(lines[2:]) #Limpa os espaços em branco para comprimir melhor + + clean_text = rle_transform(clean_text) + + output = lz78_compression(clean_text) + + print(f"Output: {output}\n") + + #Compressão em texto (human-readable) + with open(sys.argv[1] + "_compressed", "w") as save_file: + save_file.write(f"{output} \n{image_size[0]} {image_size[1]}") + + #Compressão em binário (compressão "a sério") + with open(sys.argv[1] + ".bin", "wb") as save_file: + largura = int(image_size[0]) + altura = int(image_size[1]) + save_file.write(struct.pack('II', largura, altura)) + + for indice, val in output: + simbolo_byte = val if val != -1 else 255 + save_file.write(struct.pack('HB', indice, simbolo_byte)) diff --git a/lz78/lz_78_xor.py b/lz78/lz_78_xor.py new file mode 100644 index 0000000..0d3ee90 --- /dev/null +++ b/lz78/lz_78_xor.py @@ -0,0 +1,189 @@ +import sys +import struct + +######################################################################################## +# python lz_78_xor.py +# +# c: comprimir +# d: descomprimir +# +# Os ficheiros gerados ficarão na mesma pasta que o script +######################################################################################## + +def xor(bitstream, largura, altura): + matriz = [] + for i in range(altura): + linha = [int(b) for b in bitstream[i * largura : (i + 1) * largura]] + matriz.append(linha) + + nova_imagem = "" + # A primeira linha mantém-se igual (não tem linha anterior) + nova_imagem += "".join(map(str, matriz[0])) + + for i in range(1, altura): + nova_linha = [] + for j in range(largura): + res = matriz[i][j] ^ matriz[i-1][j] + nova_linha.append(str(res)) + nova_imagem += "".join(nova_linha) + + return nova_imagem + +def descodificar_xor(bitstream_transformado, largura, altura): + matriz_temp = [] + for i in range(altura): + linha = [int(b) for b in bitstream_transformado[i * largura : (i + 1) * largura]] + matriz_temp.append(linha) + + matriz_original = [] + + matriz_original.append(matriz_temp[0]) + + for i in range(1, altura): + linha_recuperada = [] + for j in range(largura): + pixel_original = matriz_temp[i][j] ^ matriz_original[i-1][j] + linha_recuperada.append(pixel_original) + matriz_original.append(linha_recuperada) + + bitstream_final = "" + for linha in matriz_original: + bitstream_final += "".join(map(str, linha)) + + return bitstream_final + +def lz78_compression(image): + dictionary = { + 0: "" + } + + output = [] + + symbol = "" + + for i in image: + if (symbol + i) in dictionary.values(): + symbol += i + else: + if symbol == "": + output.append([0, i]) + dictionary[len(dictionary)] = i + else: + output.append([list(dictionary.keys())[list(dictionary.values()).index(symbol)], i]) + dictionary[len(dictionary)] = symbol + i + symbol = "" + + if symbol != "": + idx = list(dictionary.keys())[list(dictionary.values()).index(symbol)] + output.append([idx, ""]) + + return output, dictionary + +def lz78_decompression(compressed_image): + dictionary = { + 0: "" + } + + output = "" + + for i in compressed_image: + output += dictionary.get(i[0]) + i[1] + dictionary[len(dictionary)] = dictionary.get(i[0]) + i[1] + + return output + +def clean_image_data(image_data): + + clean_text = "" + + for line in image_data: + line = line.strip() + line = line.replace(" ", "") + if not line or line.startswith('#'): + continue + clean_text += line + + return clean_text + +def chunkstring(string, length): + return [string[i : length+i] for i in range(0, len(string), length)] + +#Comprimir +if sys.argv[1] == "c": + + with open(sys.argv[2], "r") as image: + lines = image.readlines() + image_size = lines[1].split() + + if lines[0].strip() != 'P1': + raise ValueError("This is not a pbm file") + + clean_text = clean_image_data(lines[2:]) #Limpa os espaços em branco para comprimir melhor + + clean_text = xor(clean_text, int(image_size[0]), int(image_size[1])) + + output, dic = lz78_compression(clean_text) + + print(f"Output: {output}\n") + print(f"Dictionary: {dic}") + + #Compressão em texto (human-readable) + with open(sys.argv[2] + "_compressed", "w") as save_file: + save_file.write(f"{output} \n{image_size[0]} {image_size[1]}") + + #Compressão em binário (compressão "a sério") + with open(sys.argv[2] + ".bin", "wb") as save_file: + largura = int(image_size[0]) + altura = int(image_size[1]) + save_file.write(struct.pack('II', largura, altura)) + + for indice, simbolo in output: + simbolo_byte = ord(simbolo) if simbolo != "" else 0 + save_file.write(struct.pack('HB', indice, simbolo_byte)) +#Descomprimir +elif sys.argv[1] == "d": + + #Descomprimir do ficheiro de texto + with open(sys.argv[2] + "_compressed", "r") as image: + lines = image.readlines() + + compressed_image = eval(lines[0]) + image_size = lines[1] + largura = int(lines[1].split(" ")[0]) + altura = int(lines[1].split(" ")[1]) + + output = lz78_decompression(compressed_image) + + output = descodificar_xor(output, largura, altura) + + chuncked_output = chunkstring(output, largura) + + with open(sys.argv[2] + "_decompressed", "w") as save_file: + save_file.write(f"P1\n{image_size}\n") + for line in chuncked_output: + save_file.write(f"{line}\n") + + #Descomprimir do binário + with open(sys.argv[2] + ".bin", "rb") as image: + header = image.read(8) + largura, altura = struct.unpack('II', header) + + compressed_image_bin = [] + while True: + chunk = image.read(3) + if not chunk: + break + indice, simbolo_byte = struct.unpack('HB', chunk) + simbolo = chr(simbolo_byte) if simbolo_byte != 0 else "" + compressed_image_bin.append([indice, simbolo]) + + output = lz78_decompression(compressed_image_bin) + + output = descodificar_xor(output, largura, altura) + + chuncked_output = chunkstring(output, largura) + + with open(sys.argv[2]+ "_bin_decompressed", "w") as save_file: + save_file.write(f"P1\n{largura} {altura}\n") + for line in chuncked_output: + save_file.write(f"{line}\n") diff --git a/main.py b/main.py new file mode 100644 index 0000000..df1449e --- /dev/null +++ b/main.py @@ -0,0 +1,42 @@ +import utils + +if __name__ == '__main__': + _original = utils.get_file('pixel_character.pbm') + #_original = utils.get_file('tetris_example.pbm') + _pbm_content = utils.BitMapFile(_original) + + while True: + print("\n1) print file info") + print("2) Preview arithmetic codification info ") + print("3) Encode with arithmetic style ") + print("4) Decode with arithmetic style ") + print("5) Apply XOR to image before compression \n") + _user_input = input("your option --> ") + + if _user_input == "1": + print("\n*** PORTABLE BITMAP FILE INFO ***") + print(f"magic number:{_pbm_content.magic_number},\nimage width:{_pbm_content.image_width},image height:{_pbm_content.image_height}") + print(f"Zeros ---> {_pbm_content.zeros}") + print(f"Uns ---> {_pbm_content.ones}") + print("***** \t ******** \t *****\n") + input("") + if _user_input == "2": + utils.arithmetic_cod_preview(_pbm_content) + if _user_input == "3": + _result_option_1, _result_option_2 = utils.arithmetic_encode_image(_pbm_content) + with open('arithmetic_output_opt1.txt', 'w') as f: + f.write(_result_option_1) + with open('arithmetic_output_opt2.txt', 'w') as f: + f.write(_result_option_2) + if _user_input == "4": + _result = utils.arithmetic_decode_file('arithmetic_output_opt2.txt') + with open('arithmetic_decode_output.pbm', 'w') as f: + f.write(_result) + if _user_input == "5": + _new_pbm = _pbm_content + _xor_on_image = utils.xor(_new_pbm.image_array,int(_new_pbm.image_width),int(_new_pbm.image_height)) + _new_pbm.image_arra = _xor_on_image + _, _result = utils.arithmetic_encode_image(_new_pbm) + print(_result) + with open('arithmetic_output_wxor.txt', 'w') as f: + f.write(_result) \ No newline at end of file diff --git a/pixel_character.pbm b/pixel_character.pbm new file mode 100644 index 0000000..30de542 --- /dev/null +++ b/pixel_character.pbm @@ -0,0 +1,50 @@ +P1 +48 48 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..ddff7a7 --- /dev/null +++ b/readme.txt @@ -0,0 +1,24 @@ +Universidade de Évora +Projeto da disciplina de Compressão de Dados - 2025/2026 +Compressão de Imagens Binárias + + +LZ78 - André Moleirinho (61609) +- lz_78.py +- lz_78_xor.py +- lz_78_2x2.py +- lz_78_rle.py + +Huffman - Fábio Macarrão (57098) +- huffman.py +- utils.py + +Aritmética - Vitor Costa (70323) +- arithmetic.py +- utils.py + + +Executar os scripts em ficheiros pbm: + > python + + diff --git "a/relat\303\263rio.pdf" "b/relat\303\263rio.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..a3cf56e6279e880727a99bce0e55f3f7844f6b5d GIT binary patch literal 259584 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 z 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�uuv1*t-2|cs01O;qkR~cAX@|X;k|=kU-P)I& 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 literal 0 HcmV?d00001 diff --git "a/taxa_compress\303\243o.py" "b/taxa_compress\303\243o.py" new file mode 100644 index 0000000..b9bdbd8 --- /dev/null +++ "b/taxa_compress\303\243o.py" @@ -0,0 +1,40 @@ +import os +import sys + +def calcular_taxa_compressao(caminho_original, caminho_comprimido, total_pixeis): + + tamanho_orig = os.path.getsize(caminho_original) + tamanho_comp = os.path.getsize(caminho_comprimido) + + poupanca = (1 - (tamanho_comp / tamanho_orig)) * 100 + + bpp = (tamanho_comp * 8) / total_pixeis + + return poupanca, bpp, tamanho_orig, tamanho_comp + +def clean_image_data(image_data): + + clean_text = "" + + for line in image_data: + line = line.strip() + line = line.replace(" ", "") + if not line or line.startswith('#'): + continue + clean_text += line + + return clean_text + +with open(sys.argv[1], "r") as ficheiro: + lines = ficheiro.readlines() + image_data = clean_image_data(lines[2:]) + + largura, altura = lines[1].split(" ") + + total_pixeis = int(largura) * int(altura) + p, b, t_o, t_c = calcular_taxa_compressao(sys.argv[1], sys.argv[1] + "_compressed", len(image_data)) + +print(f"Tamanho Original: {t_o} bytes") +print(f"Tamanho Comprimido: {t_c} bytes") +print(f"Redução: {p:.2f}%") +print(f"Rácio: {b:.4f} bits/pixel") \ No newline at end of file diff --git a/tetris_example.pbm b/tetris_example.pbm new file mode 100644 index 0000000..07ce596 --- /dev/null +++ b/tetris_example.pbm @@ -0,0 +1,7 @@ +P1 +4 5 +0 0 0 0 +0 0 1 0 +0 1 1 0 +0 1 0 0 +0 0 0 0 diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..3b0ab7a --- /dev/null +++ b/utils.py @@ -0,0 +1,392 @@ +import os +import math +from collections import Counter +import heapq +import numpy as np +import struct + + +class BitMapFile: + def __init__(self, text): + self._text = text.split() + self.magic_number = self._text[0] + self.image_width = self._text[1] + self.image_height = self._text[2] + self.image_array = self._text[3:] + self.zeros = 0 + self.ones = 0 + self.size = int(self.image_width) * int(self.image_height) + + for _ in range(len(self.image_array)): + if self.image_array[_] == "0": + self.zeros += 1 + elif self.image_array[_] == "1": + self.ones += 1 + else: + print("ignore") + + +""" +To read files +""" +def get_file(file_path): + with open(file_path, 'r', encoding='utf-8') as file: + _file_content = file.read() + return _file_content + +""" +To evaluate comprimento médio do código - l(c) + l(all_pixels) = ceil(log2P(all_pixels))+1 +""" +def arithmetic_cod_preview(_pbm): + print("\n*** Arithmetic Preview ***") + pixels = [int(pixel) for pixel in _pbm.image_array] + _P0 = _pbm.zeros/_pbm.size + _P1 = _pbm.ones/_pbm.size + _PT01_int = 1 + + for pixel in pixels: + if pixel == 0: + _PT01_int *= _P0 + elif pixel == 1: + _PT01_int *= _P1 + + _arithmetic_encode_lenght = np.ceil(-1*np.log2(_PT01_int)) + 1 + print(f"L(image) --> {_arithmetic_encode_lenght} bits") + _entropy = calcular_entropia(_pbm.image_array) + print(f"entropy --> {_entropy} bits") + _datastream = clean_image_data(_pbm.image_array) + _entropia_conditional = calcular_entropia_condicional(_datastream) + print(f"entropy condicional --> {_entropia_conditional} bits") + return int(_arithmetic_encode_lenght) + +""" +Arithmetic Encoding approach + +it uses static probabilities provided on output file + +c(x)=|interval_low_val +(interval_high_val).F(x)_low + =|interval_low_val +(interval_high_val).F(x)_high +_to_encode_val = avg(C(all)_low,C(all)_high) +_output = bin(_to_encode_val)) +""" +def arithmetic_encode_image(_pbm): + pixels = [int(pixel) for pixel in _pbm.image_array] + _P0 = np.float64(_pbm.zeros/_pbm.size) + _P1 = np.float64(_pbm.ones/_pbm.size) + _interval = [0,1] + # probabilidades acomuladas orderdanas por ordem crescente + _Fx = {1: (0,_P1), + 0: (_P1,1)} + _output_opt_1 = f"{_pbm.zeros} {_pbm.ones} {_pbm.image_width} {_pbm.image_height} " + + for pixel in pixels: + if pixel == 0: + _low_val = np.float64(_interval[0] + (_interval[1]-_interval[0]) * _Fx.get(0)[0]) + _high_val = np.float64(_interval[0] + (_interval[1]-_interval[0])*_Fx.get(0)[1]) + if pixel == 1: + _low_val = np.float64(_interval[0] + (_interval[1] - _interval[0]) * _Fx.get(1)[0]) + _high_val = np.float64(_interval[0] + (_interval[1] - _interval[0]) * _Fx.get(1)[1]) + _interval[0] = _low_val + _interval[1] = _high_val + + _to_encode_value = np.float64((_interval[0]+_interval[1])/2) + print(f"to encode --> {_to_encode_value}") + _output_opt_2 = _output_opt_1 + f"{_to_encode_value}" + + _size = arithmetic_cod_preview(_pbm) + _res = _to_encode_value + for _ in range(_size): + _res *=2 + if _res < 1: + _output_opt_1 += "0" + else: + _output_opt_1 += "1" + _res = _res-1 + + + return _output_opt_1,_output_opt_2 + +""" +To decode encoded pbm files with arithmetic_encode_image() + amount_of_zeros amount_of_ones image_width image_height encoded_image +""" +def arithmetic_decode_file(_txt): + _encoded_pbm_file = get_file(_txt).split() + + amount_of_zeros = int(_encoded_pbm_file[0]) + amount_of_ones = int(_encoded_pbm_file[1]) + image_width = int(_encoded_pbm_file[2]) + image_height = int(_encoded_pbm_file[3]) + encoded_image = np.float64(_encoded_pbm_file[4]) + + _output = f"P1\n{image_width} {image_height}\n" + _size = int(image_width) * int(image_height) + _P0 = np.float64(amount_of_zeros/_size) + _P1 = np.float64(amount_of_ones/_size) + _Fx = {1:(0,_P1), + 0:(_P1,1)} + + _constructed_image = "" + for h in range(image_height): + for w in range(image_width): + if _P1 < encoded_image < 1: + _constructed_image += "0 " + encoded_image = (encoded_image-_P1)/_P0 + elif 0 < encoded_image < _P1: + _constructed_image += "1 " + encoded_image = (encoded_image - 0) / _P1 + + if w == image_width-1: + _constructed_image += "\n" + + _output += _constructed_image + return _output + + +def calcular_entropia(bitstream): + n = len(bitstream) + if n == 0: return 0 + + p0 = bitstream.count('0') / n + p1 = bitstream.count('1') / n + + entropia = 0 + for p in [p0, p1]: + if p > 0: + entropia -= p * math.log2(p) + return entropia + + +def calcular_entropia_condicional(bitstream): + transicoes = {'00': 0, '01': 0, '10': 0, '11': 0} + contagem_base = {'0': 0, '1': 0} + + for i in range(len(bitstream) - 1): + par = bitstream[i:i + 2] + transicoes[par] += 1 + contagem_base[bitstream[i]] += 1 + + h_condicional = 0 + for base in ['0', '1']: + p_base = contagem_base[base] / (len(bitstream) - 1) + if p_base > 0: + h_local = 0 + for prox in ['0', '1']: + p_transicao = transicoes[base + prox] / contagem_base[base] + if p_transicao > 0: + h_local -= p_transicao * math.log2(p_transicao) + h_condicional += p_base * h_local + + return h_condicional + + +def clean_image_data(image_data): + clean_text = "" + + for line in image_data: + line = line.strip() + line = line.replace(" ", "") + if not line or line.startswith('#'): + continue + clean_text += line + + return clean_text + + +def calcular_taxa_compressao(caminho_original, caminho_comprimido, total_pixeis): + tamanho_orig = os.path.getsize(caminho_original) + tamanho_comp = os.path.getsize(caminho_comprimido) + + poupanca = (1 - (tamanho_comp / tamanho_orig)) * 100 + + bpp = (tamanho_comp * 8) / total_pixeis + + return poupanca, bpp, tamanho_orig, tamanho_comp + + +def xor(bitstream, largura, altura): + matriz = [] + for i in range(altura): + linha = [int(b) for b in bitstream[i * largura: (i + 1) * largura]] + matriz.append(linha) + + nova_imagem = "" + # A primeira linha mantém-se igual (não tem linha anterior) + nova_imagem += "".join(map(str, matriz[0])) + + for i in range(1, altura): + nova_linha = [] + for j in range(largura): + res = matriz[i][j] ^ matriz[i - 1][j] + nova_linha.append(str(res)) + nova_imagem += "".join(nova_linha) + + return nova_imagem + + +def descodificar_xor(bitstream_transformado, largura, altura): + matriz_temp = [] + for i in range(altura): + linha = [int(b) for b in bitstream_transformado[i * largura: (i + 1) * largura]] + matriz_temp.append(linha) + + matriz_original = [] + + matriz_original.append(matriz_temp[0]) + + for i in range(1, altura): + linha_recuperada = [] + for j in range(largura): + pixel_original = matriz_temp[i][j] ^ matriz_original[i - 1][j] + linha_recuperada.append(pixel_original) + matriz_original.append(linha_recuperada) + + bitstream_final = "" + for linha in matriz_original: + bitstream_final += "".join(map(str, linha)) + + return bitstream_final + + +# ------------------------------------------------------------------------- +# HUFFMAN IMPLEMENTATION +# ------------------------------------------------------------------------- + +class HuffmanNode: + def __init__(self, char, freq): + self.char = char # 0 ou 1 que está no pixel + self.freq = freq # Quantas vezes aparece + self.left = None # Filho à esquerda + self.right = None # Filho à direita + + # Nó com menor frequencia + def __lt__(self, other): + return self.freq < other.freq + + +# Constroi a árvore +def build_huffman_tree(pixels): + frequency = Counter(pixels) + heap = [HuffmanNode(char, freq) for char, freq in frequency.items()] + heapq.heapify(heap) + + # Cria a árvore de baixo para cima / frequencia menor para maior + while len(heap) > 1: + node1 = heapq.heappop(heap) + node2 = heapq.heappop(heap) + merged = HuffmanNode(None, node1.freq + node2.freq) + merged.left = node1 + merged.right = node2 + heapq.heappush(heap, merged) + + return heap[0] if heap else None + + +# Cria os códigos (0 para a esquerda, 1 para a direira) +def make_codes(node, current_code="", codes=None): + if codes is None: + codes = {} + if node is None: + return codes + if node.char is not None: + codes[node.char] = current_code + return codes + + make_codes(node.left, current_code + "0", codes) + make_codes(node.right, current_code + "1", codes) + return codes + + +# Faz encoding do ficheiro +def huffman_encode_image(_pbm): + print("\n*** Huffman Encoding ***") + pixels = _pbm.image_array + + # Erro caso não encontre a imagem + if not pixels: + print("Empty image.") + return None + + # Constroi a árvore e os códigos + root = build_huffman_tree(pixels) + codes = make_codes(root) + + print(f"Codes: {codes}") + + # Faz encode dos pixeis + encoded_str = "".join([codes[p] for p in pixels]) + + # Garante que o total é multiplo de 8 + extra_padding = 8 - len(encoded_str) % 8 + encoded_str = encoded_str + "0" * extra_padding + + # Reduz o tamanho convertendo de byte para bit + b = bytearray() + for i in range(0, len(encoded_str), 8): + byte = encoded_str[i:i + 8] + b.append(int(byte, 2)) + + # Cabeçalho + width = int(_pbm.image_width) + height = int(_pbm.image_height) + freq0 = _pbm.zeros + freq1 = _pbm.ones + header = struct.pack('>IIIIB', width, height, freq0, freq1, extra_padding) + + return header + b + + +# Faz decode do ficheiro +def huffman_decode_file(filename): + print(f"\n*** Huffman Decoding from {filename} ***") + + # Lê o ficheiro + with open(filename, 'rb') as f: + file_content = f.read() + + # Separa o cabeçalho + header_size = struct.calcsize('>IIIIB') + width, height, freq0, freq1, extra_padding = struct.unpack('>IIIIB', file_content[:header_size]) + encoded_data = file_content[header_size:] + + print(f"Header Info -> W:{width}, H:{height}, Zeros:{freq0}, Ones:{freq1}") + + # Constroi a árvore + fake_pixels = ['0'] * freq0 + ['1'] * freq1 + root = build_huffman_tree(fake_pixels) + codes = make_codes(root) + + # Faz decode dos pixeis + reverse_codes = {v: k for k, v in codes.items()} + + # Converte os bytes em string + bit_string = "" + for byte in encoded_data: + bit_string += f"{byte:08b}" + + # Desencripta + decoded_pixels = [] + current_code = "" + for bit in bit_string: + current_code += bit + if current_code in reverse_codes: + decoded_pixels.append(reverse_codes[current_code]) + current_code = "" + + # Limita o tamanho width * height + expected_pixels = width * height + decoded_pixels = decoded_pixels[:expected_pixels] + + pbm_content = f"P1\n{width} {height}\n" + + # Formata as linhas para não ficar sequencial + row_str = "" + for i, p in enumerate(decoded_pixels): + row_str += p + " " + if (i + 1) % width == 0: + pbm_content += row_str.strip() + "\n" + row_str = "" + + print("Decoding finished.") + return pbm_content -- 2.47.3