I'm trying to successfully decode Data Matrix barcodes that are base256 encoded using pylibdmtx. When the barcode contains a 0x00 byte the library seems to treat it as a string terminator (null) and ignores the rest of the data in the barcode.
Here is a snippet of code that will create a barcode and decode it:
from pylibdmtx.pylibdmtx import encode, decode
from PIL import Image
message = b'\x16\x05abc\x64\x00\x65\x66g'
print('message:',message)
barcode = encode(message)
img = Image.frombytes('RGB', (barcode.width, barcode.height), barcode.pixels)
# uncomment if you want to save the barcode to a file
#img.save('barcode.png')
decoded = decode(img)
print('decoded:',decoded)
print(' length:',len(decoded[0].data))
Here is the result:
message: b'\x16\x05abcd\x00efg'
decoded: [Decoded(data=b'\x16\x05abcd', rect=Rect(left=9, top=10, width=80, height=79))]
length: 6
The created barcode reads properly with other online tools and dmtxread invoked from a command line.
Is there a limitation with the python wrappers for libdmtx or something I am doing wrong?
Other Info:
This is the simplest example I could come up with to illustrate the problem. The barcodes are much larger and already in production systems.
I did try the python wrappers for the ZXing library and it did not even recognize many of the barcodes. I am open to using other libraries.
Thank you.