Преобразовать изображение подушки в оттенках серого в шестнадцатеричное значение? - PullRequest
0 голосов
/ 07 августа 2020

Я создаю изображение с помощью Pillow следующим образом:

from PIL import Image, ImageDraw, ImageFont
import textwrap
from io import BytesIO

def _font_as_bytes(style):
    with open(f'myfont_{style}.ttf', 'rb') as f:
        font_bytes = BytesIO(f.read())
    return font_bytes

font_title = ImageFont.truetype(_font_as_bytes('bold'), 30)
font_subtitle = ImageFont.truetype(_font_as_bytes('bold'), 18)
font_body = ImageFont.truetype(_font_as_bytes('regular'), 14)

img = Image.new("1", (296,128), color=255)

d = ImageDraw.Draw(img)

d.text((10,5), "Lorem Ipsum", font=font_title, fill=0)

subtitle = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
body = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer tristique euismod elit, ac porttitor arcu tempus at.'

offset = 40
for line in textwrap.wrap(subtitle, width=33):
    d.text((10, offset), line, font=font_subtitle, fill=0)
    offset += font_subtitle.getsize(line)[1]

for line in textwrap.wrap(body, width=45):
    d.text((10, offset), line, font=font_body, fill=0)
    offset += font_body.getsize(line)[1]

An img.show() выводит желаемый результат ( хотя меня не очень устраивает рендеринг букв, а не конечно, почему они не выглядят гладкими ):

But when I try to get the hexadecimal values of the image, by doing:

output = BytesIO()
img.save(output, format='BMP')
hex_data = output.getvalue()
print(hex_data)

Я получаю вывод, начинающийся с «BM» и знаки вроде { или ? наряду с шестнадцатеричными значениями, когда я ожидал только шестнадцатеричные значения.

Отправка этого вывода на дисплей электронной бумаги добавляет перевод к изображению следующим образом:

Думаю, я неправильно понимаю шестнадцатеричные значения, есть ли у кого-нибудь идеи, как это сделать?

1 Ответ

0 голосов
/ 07 августа 2020

Я решил эту проблему, добавив:

from PIL import ImageChops
img = ImageChops.offset(img, 0, 10)

прямо перед сохранением в буфер.

...