如何拉伸和旋转图像的右半部分?

时间:2019-11-14 10:31:25

标签: python python-imaging-library

我有一个尺寸为(600, 300)的图像,该图像是用以下代码制作的:

from PIL import Image, ImageDraw

im = Image.new('RGB', (600, 300), (255,255,255))
draw = ImageDraw.Draw(im)
draw.rectangle((0, 0, 600, 300/3), fill=(174,28,40)) #rood
draw.rectangle((0, 200, 600, 400), fill=(33,70,139)) #rood
im.save('result.jpg', quality=95)

图像具有三个水平条纹,它们具有不同的颜色(红色,白色和蓝色),如下所示:

rrrrrr 
wwwwww
bbbbbb

我想拍摄图像的后半部分,然后将其顺时针旋转90度。

rrrrwb
wwwrwb
bbbrwb

这可以用Python完成吗?

2 个答案:

答案 0 :(得分:1)

Crop图像的右侧部分,rotate旋转90度,然后paste返回图像。只需一行即可完成所有操作:

from PIL import Image, ImageDraw, ImageOps

im = Image.new('RGB', (600, 300), (255, 255, 255))
draw = ImageDraw.Draw(im)
draw.rectangle((0, 0, 600, 300/3), fill=(174, 28, 40))
draw.rectangle((0, 200, 600, 400), fill=(33, 70, 139))

# Crop right part of image, rotate by 90 degrees, and paste back into image
im.paste(im.crop((300, 0, 600, 300)).rotate(90), (300, 0))

im.save('result.jpg', quality=95)

Result

希望有帮助!

答案 1 :(得分:0)

我正在制作荷兰/法国国旗组合

借助HansHirse的帮助,我可以获得我想要的结果,即法国和荷兰国旗的统一。

from PIL import Image, ImageDraw

    im = Image.new('RGB', (600, 300), (255,255,255))
    draw = ImageDraw.Draw(im)
    draw.rectangle((0, 0, 600, 300/3), fill=(174,28,40)) #red
    draw.rectangle((0, 200, 600, 400), fill=(33,70,139)) #blue

    # the  rotation needs to be the other way around
    sub_image = im.crop(box=(300,0,600,300)).rotate(-90) # can use negative value
    im.paste(sub_image, box=(300,0)) # box=(0,300) to paste in front

    im.save('dutchFrench.jpg', quality=95)

enter image description here