大家好!欢迎来到今天的学习活动,在这里我们将共同探索使用 Python 进行图像处理的各种方法。Python 是一种功能强大且灵活的编程语言,非常适合用于图像处理等任务,因为它拥有丰富的库和工具。我们将特别使用 Pillow 库,这个库提供了许多方便的功能来处理图像。如果你还没有安装这个库,可以通过下面的命令轻松安装它:
pip install pillow
1. 导入图像
首先,我们需要导入一张图片,以便进行后续的处理和操作。这里我们将以一张名为 example.jpg 的图片作为示例,来演示如何打开和显示图像。
from PIL import Image
# 打开图片
img = Image.open('example.jpg')
# 显示图片
img.show()
在这段代码中,我们首先导入了 Pillow 库中的 Image 类,接着使用 open 方法来打开指定的图片文件。最后,通过 show 方法将打开的图片在屏幕上展示出来,使我们能够查看它的内容。
2. 获取图像尺寸
获取图片的宽度和高度是图像处理中最常见的需求之一,通常在进行其他操作之前,我们需要先知道图像的尺寸。
width, height = img.size
print(f"图片尺寸: {width}x{height}")
在这里,size 属性返回一个包含两个值的元组,分别表示图片的宽度和高度。通过这些信息,我们可以更好地理解图像的整体布局,为后续的处理步骤做好准备。
3. 裁剪图像
裁剪图像是一种常见的操作,它可以帮助我们去除图片中不需要或无关的部分,从而专注于重要的内容。
# 裁剪参数:左上角坐标 (left, top) 和右下角坐标 (right, bottom)
cropped_img = img.crop((50, 50, 200, 200))
cropped_img.show()
在这段代码中,我们指定了裁剪区域的左上角坐标 (50, 50) 和右下角坐标 (200, 200)。使用 crop 方法后,我们将得到一个新的图像,该图像只包含指定区域内的内容,并通过 show 方法将其展示出来。这样,我们就可以清晰地看到裁剪后的效果。
在图像处理领域,调整图像以适应不同需求是一项基本技能。以下是一系列高级图像处理技巧,包括缩放、旋转、翻转、颜色模式转换、边框添加、图像合成、拼接以及滤镜应用,同时增加了对图像裁剪和透明度处理的补充说明。
图像缩放是调整图像尺寸以适应特定应用场景的关键步骤。通过resize方法,可以轻松地改变图像的宽度和高度。
from PIL import Image
# 打开图像文件
img = Image.open('example.jpg')
# 调整图像大小至400x400
resized_img = img.resize((400, 400))
resized_img.show()
旋转图像可以纠正方向或创造新的视觉效果。rotate方法允许你按指定角度逆时针旋转图像。
# 逆时针旋转90度
rotated_img = img.rotate(90, expand=True) # 使用expand=True以避免裁剪
rotated_img.show()
图像翻转分为水平翻转和垂直翻转,transpose方法提供了便捷的接口。
# 水平翻转
flipped_horizontal = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_horizontal.show()
# 垂直翻转
flipped_vertical = img.transpose(Image.FLIP_TOP_BOTTOM)
flipped_vertical.show()
将图像转换为灰度图或黑白图,可以简化图像信息或创建特定效果。
# 转换为灰度图
gray_img = img.convert('L')
gray_img.show()
# 转换为黑白图
bw_img = gray_img.point(lambda x: 0 if x < 128 else 255, '1') # 使用point方法增强控制
bw_img.show()
为图像添加边框,可以提升视觉效果或强调内容。
from PIL import ImageOps
# 添加10像素宽的红色边框
bordered_img = ImageOps.expand(img, border=10, fill='red')
bordered_img.show()
裁剪图像可以去除不需要的部分,或提取感兴趣的区域。
# 裁剪图像,保留左上角100x100区域
cropped_img = img.crop((0, 0, 100, 100))
cropped_img.show()
处理具有透明度通道的图像(如PNG格式),可以调整图像的透明度。
# 转换图像为RGBA模式(支持透明度)
img_rgba = img.convert('RGBA')
# 创建一个与原图像大小相同的纯白色图像,但具有透明度
alpha_layer = Image.new('L', img.size, 128) # 128表示50%透明度
# 将透明度层合并到RGBA图像中
img_with_alpha = Image.merge('RGBA', (img_rgba.split()[:3] + (alpha_layer,)))
img_with_alpha.show()
将两张图像合成在一起,可以创建新的视觉效果或叠加信息。
from PIL importImageDraw
# 打开另一张图片作为叠加层
overlay_img =Image.open('overlay.png')
# 创建一个新的空白图像,大小与原图像相同
result =Image.new('RGBA', img.size)
# 使用paste方法将图像和叠加层合成到新图像上
result.paste(img,(0,0))
result.paste(overlay_img,(0,0), overlay_img.convert('RGBA'))# 确保overlay_img具有透明度通道
result.show()
将多张图像拼接在一起,可以创建全景图或图像网格。
# 创建一个新的空白图像,宽度为原图像的两倍,高度不变
new_img = Image.new('RGB', (img.width * 2, img.height))
# 将两张图像拼接在一起
new_img.paste(img, (0, 0))
new_img.paste(img, (img.width, 0))
new_img.show()
应用滤镜可以快速改变图像效果,如模糊、锐化等。
from PIL import ImageFilter
# 应用模糊滤镜
blurred_img = img.filter(ImageFilter.BLUR)
blurred_img.show()
# 应用锐化滤镜
sharpened_img = img.filter(ImageFilter.SHARPEN)
sharpened_img.show()
以上技巧涵盖了图像处理中的多个方面,从基础操作到高级应用,能够帮助你有效地处理和分析图像数据。

在初步掌握Python与Pillow库进行图像处理的基本操作后,我们通过一个实际案例——制作个性化名片,来深化这些技能的应用。此案例旨在为公司设计一套包含员工个人信息(如照片、姓名、职位)的名片模板。
1. 素材准备
为开始设计,需准备以下关键素材:
• 背景图片:选用一张高质量、符合公司风格的背景图(如corporate_background.jpg)。
• 员工照片:确保照片清晰且与背景风格协调(如employee_portrait.jpg)。
• 文本信息:包含员工的姓名(如“Jane Smith”)和职位(如“Senior Software Developer”)。
2. 引入必要库与加载图片
from PIL import Image, ImageDraw, ImageFont, ImageOps, ImageFilter
# 载入背景与员工照片
background = Image.open('corporate_background.jpg')
employee_photo = Image.open('employee_portrait.jpg')
3. 照片处理与边框添加
为使照片与名片尺寸匹配,需调整其大小并添加边框以提升视觉效果。
# 照片尺寸调整
resized_photo = employee_photo.resize((180, 180), Image.ANTIALIAS) # 使用ANTIALIAS以提高缩放质量
# 添加白色边框
bordered_photo = ImageOps.expand(resized_photo, border=10, fill='white')
4. 照片粘贴至背景
接下来,将处理后的照片精确粘贴至背景图片的指定位置。
# 确定照片粘贴位置
photo_position = (50, 60)
# 照片粘贴
background.paste(bordered_photo, photo_position, bordered_photo)
5. 文本添加与信息绘制
为名片添加员工姓名与职位,需利用ImageDraw与ImageFont库。
# 创建绘图对象
draw =ImageDraw.Draw(background)
# 加载字体并设置大小
font =ImageFont.truetype('arial_bold.ttf',32)# 使用粗体字体以增强可读性
# 绘制姓名与职位
name_text ='Jane Smith'
position_text ='Senior Software Developer'
draw.text((220,100), name_text, font=font, fill=(0,0,0))
draw.text((220,140), position_text, font=font, fill=(0,0,0))
6. 滤镜应用与质感提升
为增强名片质感,可对背景图片应用滤镜效果。
# 应用轻微模糊滤镜以增强层次感
blurred_background = background.filter(ImageFilter.BLUR, radius=2) # 设置模糊半径
7. 展示最终设计
最后,展示并保存设计好的名片模板。
# 展示设计结果
blurred_background.show()
# 保存设计成果
blurred_background.save('custom_business_card.jpg')
在此案例中,我们综合应用了图像处理的多种技术:
• 图片加载:使用Image.open加载背景与员工照片。
• 尺寸调整:通过resize调整照片大小。
• 边框添加:借助ImageOps.expand为照片添加边框。
• 图片粘贴:利用paste将照片粘贴至背景。
• 文本绘制:结合ImageDraw与ImageFont绘制姓名与职位。
• 滤镜应用:通过filter为背景添加模糊效果。
此案例不仅巩固了图像处理的基础知识,还展示了如何将多种技术结合,创造出实用且美观的设计作品。希望此案例能助您进一步掌握Python图像处理的高级技巧。
原文作者:讳疾忌医-note;如有侵权,请联系管理员删除。