本帖最后由 xiaolinen 于 2024-5-26 11:25 编辑
一:基础知识
1.1,安装pillow模块
pip install pillow
1.2,图像基础
1.2.1,计算机中通常将图像中的颜色表示为 RGBA 值。RGBA 值是一组数字,指定顔色中的红、绿、蓝和 alpha(透明度)的值。这些值是从 0(根本没有)到 255(最高)的整数。
1.2.2,在 Pillow 中,RGBA 值表示为四个整数值的元组。例如,红色表示为(255,0,0,255)。这种颜色中红的值为最大,没有绿和蓝,并且 alpha 值最大,这意味着它完全不透明。绿色表示为(0,255,0,255),蓝色是(0,0,255,255)。白色是各种颜色的组合,即(255,255,255,255),而黑色没有任何颜色,是(0,0,0,255)。如果颜色的 alpha 值为 0,不论RGBA 值是什么,该颜色是不可见的。毕竟,不可见的红色看起来就像不可见的黑色一样。
1.2.3,常见颜色的名称和值,如下表示:
1.2.4,ImageColor.getcolor()函数获取某一种颜色的值,示例如下:
"""
图像处理
"""
from PIL import ImageColor
a = ImageColor.getcolor("red", "RGBA")
print("a =", a)
#结果如下
a = (255, 0, 0, 255)
二:图像处理方法
2.1,基本操作方法
2.1.1,打开和关闭图像文件;
2.1.2,获取图像文件的宽度和高度;
2.1.3,获取图像文件的名称;
2.1.4,获取图像文件的类型;
2.1.5,图像文件保存为其他类型;
代码操作,如下:
"""
图像处理
"""
from PIL import Image
image_path = "E:/Project/python/tiger.jpg"
# 打开图像文件
image = Image.open(image_path)
# 显示宽度和高度
width, height = image.size
print(f"width = {width}, height = {height}")
# 文件名称
file_name = image.filename
print(f"file_name = {file_name}")
# 文件类型
file_type = image.format
print(f"file_type = {file_type}")
# 保存新类型
image.save("E:/Project/python/tiger.png")
# 关闭文件
image.close()
#结果显示
width = 450, height = 300
file_name = E:\Project\python\tiger.jpg
file_type = JPEG
2.2,裁剪图片
代码操作,如下:
"""
图像裁剪
"""
from PIL import Image
image_path = "E:/Project/python/tiger.jpg"
# 打开图像文件
image = Image.open(image_path)
# 定义裁剪区域的左上角和右下角坐标
left = 100
top = 100
right = 300
bottom = 300
# 裁剪图像
cropped_image = image.crop((left, top, right, bottom))
# 保存裁剪后的图像
cropped_image.save("E:/Project/python/tiger0.jpg")
# 关闭文件
image.close()
现象如下:(左侧为原图,右侧为裁剪后)
2.3,复制和粘贴图片
代码操作,如下:
"""
图像复制和粘贴
"""
from PIL import Image
image_path = "E:/Project/python/tiger.jpg"
image_path0 = "E:/Project/python/panda.jpg"
# 打开图像文件
image = Image.open(image_path)
image0 = Image.open(image_path0)
# 复制
image1 = image0.copy()
# 粘贴
position = (100, 100) # 粘贴的位置坐标
image.paste(image1, position)
# 保存裁剪后的图像
image.save("E:/Project/python/tiger1.jpg")
# 关闭文件
image.close()
现象如下:(左侧和右上为原图,右下为实验所得)
2.4,调整图片大小
代码操作,如下:
"""
图像调整大小
"""
from PIL import Image
image_path = "E:/Project/python/tiger.jpg"
# 打开图像文件
image = Image.open(image_path)
# 定义新的宽度和高度
new_width = 200
new_height = 450
# 更改大小
image2 = image.resize((new_width, new_height)) # 宽度和高度视为一个整体
# 保存裁剪后的图像
image2.save("E:/Project/python/tiger2.jpg")
# 关闭文件
image.close()
现象如下:(左侧为原图,右侧为更改后)
2.5,旋转和翻转图片
代码操作,如下:
"""
图像旋转和翻转
"""
from PIL import Image
image_path = "E:/Project/python/tiger.jpg"
# 打开图像文件
image = Image.open(image_path)
# 旋转图像
image.rotate(90).save("E:/Project/python/tiger3.jpg")
# 翻转图像
image.transpose(Image.FLIP_LEFT_RIGHT).save("E:/Project/python/tiger4.jpg") # 水平翻转
image.transpose(Image.FLIP_TOP_BOTTOM).save("E:/Project/python/tiger5.jpg") # 垂直翻转
# 关闭文件
image.close()
现象如下:(左上为原图,右上为旋转90°,左下为水平翻转,右下为垂直翻转)
2.6,图片中添加内容
2.6.1,添加形状
代码操作,如下:
"""
图像上绘画
"""
from PIL import Image, ImageDraw
image_path = "E:/Project/python/test.jpg"
# 定义图片尺寸和背景颜色
width = 400
height = 300
background_color = (0, 0, 255) # 蓝色
# 创建新的图片对象
image = Image.new("RGB", (width, height), background_color)
# 创建绘图对象
draw = ImageDraw.Draw(image)
# 定义矩形的位置和尺寸
x1 = 100
y1 = 50
x2 = 300
y2 = 250
# 定义矩形的颜色
rectangle_color = (255, 0, 0) # 红色
# 绘制矩形
draw.rectangle([(x1, y1), (x2, y2)], fill=rectangle_color)
# 保存图片到新文件
image.save(image_path)
现象如下:
2.6.2,添加文本
代码操作,如下:
"""
图像上添加文字
"""
from PIL import Image, ImageDraw, ImageFont
# 定义图片尺寸和背景颜色
width = 400
height = 300
background_color = (0, 0, 255) # 蓝色
# 创建新的图片对象
image = Image.new("RGB", (width, height), background_color)
# 创建绘图对象
draw = ImageDraw.Draw(image)
# 定义文字内容和颜色
text = "hello python!"
text_color = (255, 255, 255) # 白色
# 定义文字字体和大小
font = ImageFont.truetype("arial.ttf", 30) # 使用Arial字体,大小为30
# 绘制文字
draw.text((20, 150), text, font=font, fill=text_color)
# 保存图片到新文件
image_path = "E:/Project/python/test.jpg"
image.save(image_path)
现象如下: