35 lines
747 B
Python
35 lines
747 B
Python
import asyncio
|
|
import io
|
|
|
|
import PIL.Image
|
|
import wand.color
|
|
import wand.image
|
|
|
|
__all__ = ["render_svg_image"]
|
|
|
|
|
|
def _render_svg_image(svg: bytes, width: int, height: int) -> PIL.Image.Image:
|
|
with wand.image.Image(
|
|
blob=svg,
|
|
format="svg",
|
|
width=width,
|
|
height=height,
|
|
background=wand.color.Color("#ffffff00"),
|
|
) as image:
|
|
image = PIL.Image.open(
|
|
io.BytesIO(image.make_blob("png")),
|
|
)
|
|
image = image.convert("RGBA")
|
|
return image
|
|
|
|
|
|
async def render_svg_image(
|
|
svg: bytes, width: int, height: int
|
|
) -> PIL.Image.Image:
|
|
|
|
loop = asyncio.get_running_loop()
|
|
|
|
return await loop.run_in_executor(
|
|
None, _render_svg_image, svg, width, height
|
|
)
|