I’m working on a Python project where my goal is to generate barcodes in the data:image/png;base64 format, without any human-readable footer text. Additionally, I need to adjust the size (height and width) and DPI (dots per inch) of the barcode, but I'm encountering some difficulties.
Specifically, I have two issues:
I cannot remove the human-readable footer text that appears below the barcode. I am unable to customize the size (height, width) and DPI of the generated barcode. I am using the python-barcode library along with the ImageWriter to generate the barcode image. I have tried using options like text=None to remove the text and various writer_options to control the size and resolution, but nothing seems to work as expected.
Here’s what I have tried so far:
import barcode
from barcode.writer import ImageWriter
from io import BytesIO
import base64
def generate_barcode_without_text(serial_no):
barcode_instance = barcode.Code128(serial_no, writer=ImageWriter())
writer_options = {
'text': None, # Disable text under the barcode
'module_width': 0.2, # Adjust the width of the barcode
'module_height': 15, # Adjust the height of the barcode
'dpi': 300, # Set the DPI for the image
'quiet_zone': 6 # Set the quiet zone around the barcode
}
image_stream = BytesIO()
barcode_instance.write(image_stream, writer_options=writer_options)
image_stream.seek(0)
barcode_base64 = base64.b64encode(image_stream.read()).decode('utf-8')
return barcode_base64
I think the docs are slightly off for the current latest version 0.15-1.
I was able to change the size and remove the human readable barcode text from under the image with the following code:
def generate_barcode_without_text(serial_no):
barcode_instance = barcode.Code128(serial_no, writer=ImageWriter())
writer_options = {
'write_text': False, # Disable text under the barcode
'module_width': 0.8, # Adjust the width of the barcode
'module_height': 25, # Adjust the height of the barcode
'dpi': 300, # Set the DPI for the image
'quiet_zone': 6 # Set the quiet zone around the barcode
}
image_stream = BytesIO()
barcode_instance.write(image_stream, options=writer_options)
image_stream.seek(0)
barcode_base64 = base64.b64encode(image_stream.read()).decode('utf-8')
return barcode_base64
The option write_text
seems to control whether the text under the barcode is written or not. The current docs don't mention this option and say setting the font_size to 0 suppresses the text, but this yields an error for me.
The parameter name for passing the writer options to the barcode class is options
instead of writer_options
too.