使用PIL在python中旋转并将expand参数设置为true时指定图像填充颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PIL在python中旋转并将expand参数设置为true时指定图像填充颜色相关的知识,希望对你有一定的参考价值。

我正在尝试使用PIL在Python中旋转图像并将expand参数设置为true。似乎当我的图像背景为黑色时,保存为bmp的结果图像将比我的图像具有白色背景小得多,然后由于使用白色扩展而替换黑色。在任何一种情况下,我的原始图像总是两种颜色,现在我需要文件大小很小,因为我将这些图像放在嵌入式设备上。

任何想法,如果我可以强制旋转填充另一种颜色扩展或如果有另一种方式旋转我的图片,以使其小?

答案

如果原始图像没有alpha图层,则可以使用alpha图层作为蒙版将背景转换为白色。当rotate创造“背景”时,它使它完全透明。

# original image
img = Image.open('test.png')
# converted to have an alpha layer
im2 = img.convert('RGBA')
# rotated image
rot = im2.rotate(22.2, expand=1)
# a white image same size as rotated image
fff = Image.new('RGBA', rot.size, (255,)*4)
# create a composite image using the alpha layer of rot as a mask
out = Image.composite(rot, fff, rot)
# save your work (converting back to mode='1' or whatever..)
out.convert(img.mode).save('test2.bmp')
另一答案

这是一个受答案启发的工作版本,但它可以在不打开或保存图像的情况下工作,并显示如何旋转文本。

这两个图像具有彩色背景和不同于零的alpha通道,以显示正在发生的事情。将两个alpha通道从92更改为0将使它们完全透明。

from PIL import Image, ImageFont, ImageDraw

text = 'TEST'
font = ImageFont.truetype(r'C:WindowsFontsArial.ttf', 50)
width, height = font.getsize(text)

image1 = Image.new('RGBA', (200, 150), (0, 128, 0, 92))
draw1 = ImageDraw.Draw(image1)
draw1.text((0, 0), text=text, font=font, fill=(255, 128, 0))

image2 = Image.new('RGBA', (width, height), (0, 0, 128, 92))
draw2 = ImageDraw.Draw(image2)
draw2.text((0, 0), text=text, font=font, fill=(0, 255, 128))

image2 = image2.rotate(30, expand=1)

px, py = 10, 10
sx, sy = image2.size
image1.paste(image2, (px, py, px + sx, py + sy), image2)

image1.show()

以上是关于使用PIL在python中旋转并将expand参数设置为true时指定图像填充颜色的主要内容,如果未能解决你的问题,请参考以下文章

旋转后Python PIL保存图像

使用 Python 旋转具有 EXIF 中指定方向的图像,而不使用 PIL,包括缩略图

如何使用 python 的 PIL 以一定角度绘制文本?

python PIL图片自动旋转

图像旋转任意角度+python

Python 3.x PIL 图像保存和旋转