You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
The parameter direction of ImageDraw.text can't use Chinese sequence #3125
Traceback (most recent call last):
File "draw_character.py", line 111, in <module>
draw.text((0, 0), '我和你', font=font, fill='black', direction='ttb')
File "/home/xyl/anaconda3/lib/python3.6/site-packages/Pillow-5.0.0-py3.6-linux-x86_64.egg/PIL/ImageDraw.py", line 220, in text
File "/home/xyl/anaconda3/lib/python3.6/site-packages/Pillow-5.0.0-py3.6-linux-x86_64.egg/PIL/ImageFont.py", line 166, in getmask2
RuntimeError: raqm_layout() failed.
Hi, I meet the same problem, I try use python2 env to solve the problem but not work.
Finally, I change the font to solve it. You can try to use the Chinese font to draw the image If your text is in Chinese. For example, I use the font called '华文细黑.ttf' then the program will work.
@lvhuiyang
Hi lvhuiyang, Thanks for your solution. But my question is the parameter direction in ImageDraw.text(). This parameter can change the text direction according to the documentation. I don't know this parameter whether it is useful or not on your env. I hope I can get your reply.
Traceback (most recent call last):
File "tools/check_generated_img.py", line 130, in <module>
check_textimg_gen(sys.argv[1], 32, 820, 32, rotate=False, rand_invert=True, vertical=True)
File "tools/check_generated_img.py", line 56, in check_textimg_gen
for inp, out in textimagegen.next_train():
File "/mnt/data/VisualRecognition/infordio/crnn/generators.py", line 351, in next_train
self.minibatch_size, train=True)
File "/mnt/data/VisualRecognition/infordio/crnn/generators.py", line 332, in get_batch
X_data[i, 0:self.img_w, :, 0] = self.paint_func(text_obj).T
File "/mnt/data/VisualRecognition/infordio/crnn/generators.py", line 380, in <lambda>
vertical=self.vertical)
File "/mnt/data/VisualRecognition/infordio/crnn/generators.py", line 436, in paint_text
invert=gen_invert)
File "/mnt/data/VisualRecognition/infordio/crnn/paint.py", line 564, in paint_txt_v51_vertical
text_width, text_height = font.getsize(text_obj.sen, direction=direction)
File "/home/binhnq/anaconda3/envs/infordio/lib/python3.5/site-packages/PIL/ImageFont.py", line 156, in getsize
size, offset = self.font.getsize(text, direction, features)
RuntimeError: raqm_layout() failed.
Direction of the text. It can be ‘rtl’ (right to left), ‘ltr’ (left to right), ‘ttb’ (top to bottom) or ‘btt’ (bottom to top). Requires libraqm.
(top to bottom) or ‘btt’ option doesn't work in 5.2.0
Traceback (most recent call last):
File "/Users/user/Desktop/project/vincent/source/project/src/designer/ruler/test_layout.py", line 22, in <module>
test_layout()
File "/Users/user/Desktop/project/vincent/source/project/src/designer/ruler/test_layout.py", line 18, in test_layout
draw.text((0, 0), 'test', font=font, fill='#000000', direction='btt')
File "/Users/user/.local/share/virtualenvs/project-rA-tx4nR/lib/python3.6/site-packages/PIL/ImageDraw.py", line 275, in text
*args, **kwargs)
File "/Users/user/.local/share/virtualenvs/project-rA-tx4nR/lib/python3.6/site-packages/PIL/ImageFont.py", line 184, in getmask2
size, offset = self.font.getsize(text, direction, features)
ValueError: direction must be either 'rtl', 'ltr' or 'ttb'
changed the title [-]The parameter direction of ImageDraw.text can't use chinese sequence[/-][+]The parameter direction of ImageDraw.text can't use Chinese sequence[/+]on Jan 19, 2019
Since your goal surely isn't just to show English characters in reverse, there's not a specific situation to help with here. If anyone has any further thoughts, feel free to comment, and this can be re-opened.
The direction parameter sets the overall paragraph direction, the individual character's direction is determined by BiDi algorithm. Unicode bidi control characters can be to force text direction to be LTR or RTL and override the algorithm (though that is not usually something very useful todo, expect for ancient scripts that can be written in either direction or pseudo RTL localization strings).
Activity
lyu-huiyang commentedon May 23, 2018
@xyl576807077
Hi, I meet the same problem, I try use python2 env to solve the problem but not work.
Finally, I change the font to solve it. You can try to use the
Chinesefont to draw the image If your text is in Chinese. For example, I use the font called '华文细黑.ttf' then the program will work.The code:
im.show() :

xyl576807077 commentedon May 23, 2018
@lvhuiyang
Hi lvhuiyang, Thanks for your solution. But my question is the parameter direction in ImageDraw.text(). This parameter can change the text direction according to the documentation. I don't know this parameter whether it is useful or not on your env. I hope I can get your reply.
lyu-huiyang commentedon May 24, 2018
@xyl576807077 I think I can't help you because I meet the same problem when I use parameter
direction. I find the description from doc:Requires libraqm. So, I install libraqm from libraqm's doc but my program can't work yet. If get the solution you can tell me, thanks.
binhnq94 commentedon Aug 30, 2018
I got the same bug.
Do someone have some idea? :(
Lyntball commentedon Sep 11, 2018
ok i'm not the only one.
masushin commentedon Sep 14, 2018
I think that the following issue of raqm is causing raqm_layout() to fail.
HOST-Oman/libraqm#81
So, we need to update raqm to latest.
However, I think that even if using latest raqm, Pillow cannot works the direction feature for "ttb" correctly.
#2656
I have checked it using latest raqm, it does not works yet.
KennethanCeyer commentedon Sep 18, 2018
I have suffering the same issue
I tried to check various libraqm versions
0.3.0,0.4.0,0.5.00.6.0(master)with pillow
5.2.0and python3.6inMacOS HighSierra 10.13.64.3.0+libraqm 0.3.0+harfbuzz 1.7.0=> mangled5.0.0+libraqm 0.4.0+harfbuzz 1.7.0=> mangled5.0.0+libraqm 0.5.0+harfbuzz 1.8.0=> mangled5.0.0+libraqm 0.6.0+harfbuzz 1.9.0=> mangledhugovk commentedon Sep 18, 2018
Should this be reported to https://github.com/HOST-Oman/libraqm?
KennethanCeyer commentedon Sep 18, 2018
@hugovk
I don't know of the detailed point of the problem (fault of libraqm or not)
KennethanCeyer commentedon Sep 18, 2018
And i also found some error of documentation
check follows link
https://pillow.readthedocs.io/en/5.2.x/reference/ImageDraw.html#PIL.ImageDraw.PIL.ImageDraw.ImageDraw.text
(top to bottom) or ‘btt’ option doesn't work in
5.2.0hugovk commentedon Sep 18, 2018
@KennethanCeyer Good find, Raqm doesn't support
btt. Here's a PR to update the docs: #3362.KennethanCeyer commentedon Sep 18, 2018
Is it some kind a bug of
Pillow/src/_imagingft.c
Lines 462 to 467 in 3cf6ad1
?
or just
https://github.com/HOST-Oman/libraqm/blob/4ebfcd4121cb1796f7391d34d0a59a579d01505e/src/raqm.c#L834-L915
https://github.com/HOST-Oman/libraqm/blame/4ebfcd4121cb1796f7391d34d0a59a579d01505e/src/raqm.c#L834-L915
[-]The parameter direction of ImageDraw.text can't use chinese sequence[/-][+]The parameter direction of ImageDraw.text can't use Chinese sequence[/+]radarhere commentedon Apr 11, 2019
@KennethanCeyer what font are you using in your example - 'input/fonts/font.otf'?
KennethanCeyer commentedon May 7, 2019
@radarhere I've tried today again with follows code in MacOS.
and These issues seem to be still existed
As you can see, I've tested with Truetype font, Arial.ttf
radarhere commentedon May 17, 2019
I've created PR #3856 to resolve the problem from @KennethanCeyer.
radarhere commentedon Jun 22, 2019
#3856 has been merged. From the original post, 1 should be solved. Here is my slightly adjusted code -
radarhere commentedon Jun 22, 2019
With regards to 2 in the original post, I don't think this is how rtl works. English characters are strong characters, and have a definite directionality. However, weak characters, such as arithmetical symbols, do not and are able to be shown right-to-left by Pillow.
Since your goal surely isn't just to show English characters in reverse, there's not a specific situation to help with here. If anyone has any further thoughts, feel free to comment, and this can be re-opened.
KennethanCeyer commentedon Jun 22, 2019
@radarhere
You're the hero!
I will check the new version of Pillow and their result by build on your #3856 PR's source code as soon as possible
Yeah In this issue, The rtl option is not the main topic
Maybe that issue should be treated at another new issue
khaledhosny commentedon Jun 23, 2019
The
directionparameter sets the overall paragraph direction, the individual character's direction is determined by BiDi algorithm. Unicode bidi control characters can be to force text direction to be LTR or RTL and override the algorithm (though that is not usually something very useful todo, expect for ancient scripts that can be written in either direction or pseudo RTL localization strings).