Изменить: После ответа я заметил, что у вас есть завод, который устанавливает quiet_zone
на 1.0
. Измените это обратно на 6.5
, и я думаю, что это будет хорошо выглядеть.
Edit2: я неправильно понял, с какой именно проблемой вы столкнулись.
По какой-либо причине автор pyBarcode
помещает текст по центру штрих-кода. Когда метод рендеринга вызывает _paint_text()
, он переходит в xpos/2
, что устанавливает его в середине штрих-кода. Я думаю, что это нормально с шрифтом по умолчанию, который он использует, но когда вы увеличили шрифт, он больше не подходит.
Вместо этого я смог разместить его на левой стороне, переопределив метод _paint_text()
. В последней строке ниже переменная pos
- это просто кортеж, содержащий координаты (x, y), которые сообщают PIL, где рисовать текст на штрих-коде. Итак, я убедился, что х выровнен со штрих-кодом. Если вам нужно, чтобы он был выровнен по правому краю, вы можете поиграть с переменной xpos
, чтобы получить ее там, где вам нужно.
Дайте этому шанс:
class MyImageWriter(ImageWriter):
def calculate_size(self, modules_per_line, number_of_lines, dpi=300):
width = 2 * self.quiet_zone + modules_per_line * self.module_width
height = 1.0 + self.module_height * number_of_lines
if self.text:
height += (self.font_size + self.text_distance) / 3
return int(mm2px(width, dpi)), int(mm2px(height, dpi))
def _paint_text(self, xpos, ypos):
# this should align your font to the left side of the bar code:
xpos = self.quiet_zone
pos = (mm2px(xpos, self.dpi), mm2px(ypos, self.dpi))
font = ImageFont.truetype(FONT, self.font_size)
self._draw.text(pos, self.text, font=font, fill=self.foreground)