Добавьте битовую строку crc к изображению

#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 мог бы сделать его более эффективным и чистым для вас.