Хорошо, во-первых, источником моих данных являются листы Google, простая таблица со строками (ID, Confession и Age). Я использую api листов Google, чтобы подключить данные к моему python скрипту с помощью gspread и google oauth2client, чтобы получить Столбец исповеди (который в основном состоит из абзацев, от 100 до 200 арабских c слов)
После того, как данные / признание сохраняются в переменной исповеди в моем коде, я запускаю его с помощью функций преобразования арабского c и получить отображение (алгоритм биди). затем вывод обрабатывается «Pillow-Img», чтобы добавить абзацы в изображение. вывод в порядке, араби c отображается отлично, но строки начинаются снизу, а не с верхней правой стороны.
текст должен быть написан справа налево
пример: тест
1011 * однако, фактический абзац
كيما يكون التقريران متسقين تماما, فإن هناك تغييرا طفيفا في الفقرة 2 من تقرير الفريق العامل الثاني, التي يرد فيها ذكر الرئيس والموظفين المعنيين الآخرين.
как вы можете заметить «كيما يكون التقريران» стоит в конце предложения на изображении, но в начале (справа вверху) в исходном абзаце (цитата ), поэтому в основном строки меняются местами, и я не могу найти обходной путь, не разбивая абзацы на маленькие строки, а затем распечатывая их построчно, что буквально невозможно из-за того, что средний абзац будет около 200 слов.
get_arabic_text()
и arabicfix()
- обе функции созданы для изменения формы арабского c, за исключением того, что get_arabic_text разделяет ввод и изменяет слово за словом. но arabicfix () просто помещает все данные в преобразователь arabi c. в коде я запускаю только arabicfix ()
Я склонен полагать, что проблема находится в пределах bidi algorithm
, но я не могу найти решение.
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont
from bidi.algorithm import get_display
import textwrap, os, re, arabic_reshaper
from rtl import reshaper
def f(p): return os.path.join(directory, p)
directory = os.path.normcase(os.path.dirname(__file__))
def get_arabic_text(text):
if reshaper.has_arabic_letters(text):
words = text.split()
reshaped_words = []
for word in words:
if reshaper.has_arabic_letters(word):
# for reshaping and concating words
reshaped_text = reshaper.reshape(word)
# for right to left
bidi_text = get_display(reshaped_text)
reshaped_words.append(bidi_text)
else:
reshaped_words.append(word)
reshaped_words.reverse()
return ' '.join(reshaped_words)
return text
def draw_multiple_line_text(image, text, font, text_color, text_start_height):
draw = ImageDraw.Draw(image)
print(text)
image_width, image_height = image.size
y_text = text_start_height
lines = textwrap.wrap(text, width=65)
print(lines)
for line in lines:
line_width, line_height = font.getsize(line)
draw.text(((image_width - line_width)/2, y_text),line, font=font, fill=text_color)
y_text += line_height
def arabicfix(text):
config_from_font = arabic_reshaper.config_for_true_type_font(
f('arial.ttf'))
reshaper = arabic_reshaper.ArabicReshaper(config_from_font)
text_to_be_reshaped = text
reshaped_text=reshaper.reshape(text_to_be_reshaped)
bidi_text = get_display(reshaped_text,base_dir='R')
return bidi_text
def main():
image = Image.open('twitter2.jpg')
arabictext=u"كيما يكون التقريران متسقين تماما، فإن هناك تغييرا طفيفا في الفقرة 2 من تقرير الفريق العامل الثاني، التي يرد فيها ذكر الرئيس والموظفين المعنيين الآخرين."
text=arabicfix(arabictext)
print("text:", text)
fontsize = 25
textcolor= (0,0,0)
text_height =50
font = ImageFont.truetype('/Users/Hady/PycharmProjects/untitled/arial.ttf', fontsize)
draw_multiple_line_text(image, text, font,textcolor,text_height)
image.save(f('tofff.jpg'))
main()