#python-3.x #image-processing #data-conversion #crc #bytesio
Вопрос:
Я преобразовал изображение png в базовую 2-битную последовательность с помощью следующей программы
from io import BytesIO
from PIL import Image
//CRC PROCESS OF DATA BIT OF IMAGE
def xor(a,b) :
hasil = []
for i in range(1,len(b)) :
if a[i] == b[i] :
hasil.append('0')
else :
hasil.append('1')
return ''.join(hasil)
def mod2div(hasilbagi,pembagi) :
pick = len(pembagi)
tmp = hasilbagi[0:pick]
while pick <len(hasilbagi) :
if tmp[0]=='1':
tmp = xor(pembagi,tmp) hasilbagi[pick]
else :
tmp = xor('0'*pick,tmp) hasilbagi[pick]
pick =1
if tmp[0] == '1':
tmp = xor(pembagi, tmp)
else :
tmp = xor('0'*pick, tmp)
checkword = tmp
return checkword
def encodeData(data, key) :
panjang=len(key)
# Appends n-1 zeroes at end of data
appended_data = data '0'*(panjang-1)
remainder = mod2div(appended_data, key)
# Append remainder in the original data
codeword = data remainder
return codeword
//END CRC PROCESS FUNCTION
out = BytesIO()
with Image.open("download.png") as img:
img.save(out, format="png")
inbytes = out.getvalue()
biner = "".join([format(n, '08b') for n in inbytes])
#print(tobit)
w = open("temp","w")
w.write(biner)
#a = open("temp", "r")
b = open("send", "w")
inputkey = input("Enter Key : ")
#biner = tobit#a.read()
key = inputkey
data_crc = encodeData(biner,key)
b.write(data_crc)
print(len(data_crc))
#convert to image again
#f = open("send","r")
#biner = f.read()
# #Code to Convert image
decoded_b2 = [int(data_crc[i:i 8], 2) for i in range(0, len(data_crc), 8)]
with open('FIXSEND', 'wb') as f:
f.write(bytes(decoded_b2))
После повторного преобразования в изображение это сработало, но когда я снова распаковал его в серию битов, 8-битный CRC, добавленный ранее, был нечитаем и преобразован в часть изображения. кто-нибудь может помочь мне найти решение?
Я надеюсь, что мне помогут выполнить мое последнее школьное задание
Спасибо за вашу помощь
Комментарии:
1. может
np.unpackbits
быть, иnp.packbits
мог бы сделать его более эффективным и чистым для вас.