Add support for using BLF to draw into an ImBuf image buffer.
Once the imbuf context has been set, draw calls for that font_id will draw into the image.
This works by binding an imbuf to BLF which is then used as the target when drawing.
```
with blf.bind_imbuf(font_id, imbuf):
blf.draw_buffer(font_id, text)
```
See the example in the Python API documentation for reference.
The following BLF API's have been added to support a Python context manager.
- `BLF_buffer_state_push`.
- `BLF_buffer_state_pop`
- `BLF_buffer_state_free`
Ref !135772
30 lines
688 B
Python
30 lines
688 B
Python
"""
|
|
Drawing Text to an Image
|
|
++++++++++++++++++++++++
|
|
|
|
Example showing how text can be draw into an image.
|
|
This can be done by binding an image buffer (:mod:`imbuf`) to the font's ID.
|
|
"""
|
|
|
|
import blf
|
|
import imbuf
|
|
|
|
image_size = 512, 512
|
|
font_size = 20
|
|
|
|
ibuf = imbuf.new(image_size)
|
|
|
|
font_id = blf.load("/path/to/font.ttf")
|
|
|
|
blf.color(font_id, 1.0, 1.0, 1.0, 1.0)
|
|
blf.size(font_id, font_size)
|
|
blf.position(font_id, 0, image_size[0] - font_size, 0)
|
|
|
|
blf.enable(font_id, blf.WORD_WRAP)
|
|
blf.word_wrap(font_id, image_size[0])
|
|
|
|
with blf.bind_imbuf(font_id, ibuf, display_name="sRGB"):
|
|
blf.draw_buffer(font_id, "Lots of wrapped text. " * 50)
|
|
|
|
imbuf.write(ibuf, filepath="/path/to/image.png")
|