Предыстория: Я пытаюсь создать ярлык FNSKU для Amazon с помощью python, я слишком много манипулирую изображениями, поэтому у меня нет возможности использовать ярлыки у центрального продавца, мне нужно как-то их создать.
Проблема: ярлыки Amazon являются приятными и маленькими: https://i.stack.imgur.com/hlgPA.jpg
Я создаю ярлыки: https://i.stack.imgur.com/hlgPA.jpg
Я попытался изменить размер изображения и использовать шрифты штрих-кода, но все это не сканирует, как я могу кодировать
Это те модули, которые я пробовал:
reportlab:
from reportlab.pdfgen import canvas
from reportlab.graphics.barcode import code128
from reportlab.lib.units import mm
c = canvas.Canvas("BRC.pdf")
c.setPageSize(57*mm, 32*mm) barcode = code128.Code128("X001SB7OYL",
barHeight=.9*inch,barWidth = 1.2)
barcode.drawOn(c, 2*mm, 20*mm) c.showPage() c.save()
- изменение размера кода здесь, чтобы быть меньше не работает, код не читается.
Я также использовал код python-barcode с кодом, который выглядит так:
code128(u'X001SB7OYL', writer=ImageWriter())
Повторяется одна и та же проблема, как только я изменил ее размер, она не будет отсканирована.
Есть две проблемы с вашей сгенерированной версией штрих-кода:
его пропорции отличаются от желаемой формы - вы можете исправить это, выбрав меньшую высоту столбца (и, возможно, изменив высоту рисованного ). Я не знаю, что влияет на расстояние между штрих-кодом и текстом под ним, оно слишком велико. он в целом шире, чем желаемый. Вы говорите, что если вы уменьшите его, изменив параметры, он станет несканимым. Не могли бы вы опубликовать результат с шириной вытягивания около 37 мм? Если проблема связана с неточным размещением строк из-за ограниченного разрешения, вы можете обойти это, сначала сделав изображение большим (но пропродайте, чтобы оно было не слишком высоким, а текст близок к штрих-коду), а затем используя библиотека, которая имеет достойную функцию сглаживания сглаживания (например, ImageMagick), чтобы масштабировать ее до нужного размера.Если я понимаю проблему, это решение. Этот код сокращает горизонтальные сечения изображения.
from PIL import Image
from numpy import array, delete
from copy import deepcopy
def img_to_mat(img):
return array(img)
def mat_to_img(mat, encoding='RGB'):
"""
input: zeros((h, w, 3), dtype=uint8)
return: img
"""
return Image.fromarray(mat, encoding)
def cut(img, h1, h2):
""" cut lines from h1 to h2 of img """
mat = deepcopy(img_to_mat(img))
for i in range(h2 - h1):
mat = delete(mat, h1, axis=0)
return mat_to_img(mat)
# Load image
path = 'gallery\\bar2.png'
Im = Image.open(path)
# cut from up to down
Im = cut(Im, 200, 240)
Im = cut(Im, 50, 170)
Im.save(path.split('.')[0] + '-new.' + path.split('.')[1])
Im.show()
значения примера настраиваются для вашего конкретного примера изображения.
Вы можете удалить разделы своего исходного изображения, как заявил Омар.
Гораздо проще сделать это:
file = 'barcode.png' # path to saved barcode
img = Image.open(file)
img1 = img.crop((0, 0, 402, 50)) # crop image into the 3 required sections
img2 = img.crop((0, 170, 402, 200))
img3 = img.crop((0, 240, 402, 270))
image = Image.new('RGB', (402, 110))
image.paste(img1, (0, 0, 402, 50)) # stich the cropped images together
image.paste(img2, (0, 50, 402, 80))
image.paste(img3, (0, 80, 402, 110))
image.thumbnail((222, 222), Image.NEAREST)
image.save(file)