Мне нужно сделать меньшую версию штрих-кода 128A на Python, но не добились успеха

Предыстория: Я пытаюсь создать ярлык 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())

Повторяется одна и та же проблема, как только я изменил ее размер, она не будет отсканирована.

0
задан 13 August 2018 в 14:54

3 ответа

Есть две проблемы с вашей сгенерированной версией штрих-кода:

его пропорции отличаются от желаемой формы - вы можете исправить это, выбрав меньшую высоту столбца (и, возможно, изменив высоту рисованного ). Я не знаю, что влияет на расстояние между штрих-кодом и текстом под ним, оно слишком велико. он в целом шире, чем желаемый. Вы говорите, что если вы уменьшите его, изменив параметры, он станет несканимым. Не могли бы вы опубликовать результат с шириной вытягивания около 37 мм? Если проблема связана с неточным размещением строк из-за ограниченного разрешения, вы можете обойти это, сначала сделав изображение большим (но пропродайте, чтобы оно было не слишком высоким, а текст близок к штрих-коду), а затем используя библиотека, которая имеет достойную функцию сглаживания сглаживания (например, ImageMagick), чтобы масштабировать ее до нужного размера.
0
ответ дан 15 August 2018 в 17:05

Если я понимаю проблему, это решение. Этот код сокращает горизонтальные сечения изображения.

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()

значения примера настраиваются для вашего конкретного примера изображения.

0
ответ дан 15 August 2018 в 17:05
  • 1
    Хорошо, теперь я понял, тогда проблема должна заключаться в том, что не все бары изменяются равномерно, не так ли? – Omar Cusma Fait 13 August 2018 в 16:01

Вы можете удалить разделы своего исходного изображения, как заявил Омар.

Гораздо проще сделать это:

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)
0
ответ дан 15 August 2018 в 17:05
  • 1
    Это только уменьшает изображение, но по-прежнему существует проблема с шириной, изменение высоты изображения не имеет значения, и оно все равно будет сканироваться - но регулировка ширины делает его нечитаемым. – MarinaF 13 August 2018 в 15:46
  • 2
    Какая ширина вам нужна, чтобы изображение было? – weakit 13 August 2018 в 15:53
  • 3
    Это должна быть ширина первого меньшего изображения, проблема в том, что определение размера по ширине не работает, изображение не будет сканироваться. – MarinaF 13 August 2018 в 16:19
  • 4
    Проверьте, читается ли штрих-код. Текст под штрих-кодом будет нечитабельным, но штрих-код должен сканировать точно. – weakit 14 August 2018 в 18:09

Другие вопросы по тегам:

Похожие вопросы: