操作图像4-pillow-旋转,翻转图像、更改单个元素

本文介绍了使用Pillow库对图像进行旋转和翻转的方法,包括rotate()函数的使用,以及如何处理旋转后尺寸的变化。同时,讲解了transpose()方法实现图像的水平或垂直翻转。此外,还探讨了通过getpixel()和putpixel()改变单个像素颜色的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1旋转、翻转图像

图像可以用rotate()方法旋转,该方法返回旋转后的新Image对象,并保持原始Image对象不变。rotate()的参数是一个整数或浮点数,
表示图像逆时针旋转的度数。
这里写图片描述

这里写图片描述

这里写图片描述

from PIL import Image


'''打开图像'''
catCopyIm = Image.open(r'D:\image\image.jpg')

'''逆时针旋转90度的新Image图像'''
catCopyIm.rotate(90).save('rotate90.png')

'''逆时针旋转180度的新Image图像'''
catCopyIm.rotate(180).save('rotate180.png')

'''逆时针旋转270度的新Image图像'''
catCopyIm.rotate(270).save('rotate270.png')

注意,当图像旋转90或270度时,宽度和高度会变化。如果旋转其他角度,图像 的原始尺寸会保持; windows上,
使用黑色的背景来填补旋转造成的缝隙


这里写图片描述

这里写图片描述

rotate()方法有一个可选的expand关键字参数,如果设为True,就会放大图像的尺寸,以适应整个旋转后的新图像

'''旋转6度'''
catCopyIm.rotate(6).save('roteat6.png')

'''expand设置为True'''
catCopyIm.rotate(6, expand=True).save('roteat6_expand.png')

transpose()方法,得到图像的”镜像翻转” 必须传入Image.FLIP_LEFT_RIGHT
或Image.FLIP_TOP_BOTTOM。

这里写图片描述

这里写图片描述

'''水平翻转'''
catCopyIm.transpose(Image.FLIP_LEFT_RIGHT).save('horizontal_flip.png')

'''垂直翻转'''
catCopyIm.transpose(Image.FLIP_TOP_BOTTOM).save('vertrical_flip.png')

以上demo:

from PIL import Image


'''打开图像'''
catCopyIm = Image.open(r'D:\image\image.jpg')

'''逆时针旋转90度的新Image图像'''
catCopyIm.rotate(90).save('rotate90.png')

'''逆时针旋转180度的新Image图像'''
catCopyIm.rotate(180).save('rotate180.png')

'''逆时针旋转270度的新Image图像'''
catCopyIm.rotate(270).save('rotate270.png')


'''旋转6度'''
catCopyIm.rotate(6).save('roteat6.png')

'''expand设置为True'''
catCopyIm.rotate(6, expand=True).save('roteat6_expand.png')

'''水平翻转'''
catCopyIm.transpose(Image.FLIP_LEFT_RIGHT).save('horizontal_flip.png')

'''垂直翻转'''
catCopyIm.transpose(Image.FLIP_TOP_BOTTOM).save('vertrical_flip.png')

2 更改单个像素

单个像素的颜色可以通过getpixe()和putpixel()方法取得和设置。
它们都接受一个元组,表示像素的X和Y坐标。putpixel()方法还接受一个元组
作为该像素的颜色,这个颜色参数是四个整数RGBA元组或三整数RGB元组。

这里写图片描述

from PIL import Image
from PIL import ImageColor
'''200×200的透明正方形'''
im = Image.new('RGBA', (200, 200))

'''坐标调用'''
print(im.getpixel((0, 0)))

'''遍历上半部份的所有像素'''
for x in range(200):
    for y in range(100):
        '''设置每个像素的颜色'''
        im.putpixel((x, y), (255,255,255))

for x in range(200):
    for y in range(100,200):
        '''假定不知道RGB元组,必须使用ImageColor.getcolor()'''
        im.putpixel((x, y), ImageColor.getcolor('darkgray', 'RGBA'))

print(im.getpixel((0, 0)))
'''调用坐标'''
print(im.getpixel((0,100)))
'''保存图像'''
im.save('putpixel.png')
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值