如何在背景中绘制文字和图像?

Bip*_*ain 3 python alpha python-imaging-library

我想做一个像蟒蛇这样的东西。 示例图片

我将图像放在背景中并用透明填充写入文本,以便显示图像。

mar*_*eau 6

这是我发现使用此处和此处Image.composite()记录的函数来实现此目的的一种方法。

\n

在对问题Is it possible to mask an image in Python Imaging Library (PIL)? 的回答中(非常)简洁地描述了所使用的方法。作者:@Mark Ransom\xe2\x80\xa6 以下只是应用它来完成您想要做的事情的说明。

\n
from PIL import Image, ImageDraw, ImageFont\n\nBACKGROUND_IMAGE_FILENAME = \'cookie_cutter_background_cropped.png\'\nRESULT_IMAGE_FILENAME = \'cookie_cutter_text_result.png\'\nTHE_TEXT = \'LOADED\'\nFONT_NAME = \'arialbd.ttf\'  # Arial Bold\n\n# Read the background image and convert to an RGB image with Alpha.\nwith open(BACKGROUND_IMAGE_FILENAME, \'rb\') as file:\n    bgr_img = Image.open(file)\n    bgr_img = bgr_img.convert(\'RGBA\')  # Give iamge an alpha channel.\n    bgr_img_width, bgr_img_height = bgr_img.size\n    cx, cy = bgr_img_width//2, bgr_img_height//2  # Center of image.\n\n# Create a transparent foreground to be result of non-text areas.\nfgr_img = Image.new(\'RGBA\', bgr_img.size, color=(0, 0, 0, 0))\n\nfont_size = bgr_img_width//len(THE_TEXT)\nfont = ImageFont.truetype(FONT_NAME, font_size)\n\ntxt_width, txt_height = font.getsize(THE_TEXT)  # Size of text w/font if rendered.\ntx, ty = cx - txt_width//2, cy - txt_height//2  # Center of text.\n\nmask_img = Image.new(\'L\', bgr_img.size, color=255)\nmask_img_draw = ImageDraw.Draw(mask_img)\nmask_img_draw.text((tx, ty), THE_TEXT, fill=0, font=font, align=\'center\')\n\nres_img = Image.composite(fgr_img, bgr_img, mask_img)\nres_img.save(RESULT_IMAGE_FILENAME)\nres_img.show()\n
Run Code Online (Sandbox Code Playgroud)\n

其中,使用以下内容BACKGROUND_IMAGE:

\n

背景图

\n

生成了如下所示的图像,这是在 Photoshop 中查看的图像,因此它的透明背景是可以辨别的(未按比例):

\n

生成的结果图像

\n

这是放大图,显示了平滑渲染的角色边缘:

\n

结果图像的放大部分

\n