Python中PIL库的常用用法示例

news2024/10/2 3:14:50

        Python中的PIL(Python Imaging Library,已更名为Pillow)是一个功能强大的图像处理库。以下是一些常用的PIL功能及相应的代码示例:

1. 打开和保存图像:

from PIL import Image

# 打开图像
image = Image.open("example.jpg")

# 保存图像
image.save("example_saved.jpg")

2. 显示图像:

from PIL import Image

image = Image.open("example.jpg")
image.show()

 

3. 图像尺寸调整(resize):

from PIL import Image

image = Image.open("example.jpg")

# 修改图像尺寸
new_size = (width, height)
resized_image = image.resize(new_size)
resized_image.save("example_resized.jpg")

4. 图像旋转:

from PIL import Image

image = Image.open("example.jpg")

# 旋转图像
rotated_image = image.rotate(45)  # 旋转45度
rotated_image.save("example_rotated.jpg")

5. 图像裁剪:

from PIL import Image

image = Image.open("example.jpg")

# 裁剪图像
crop_box = (left, upper, right, lower)
cropped_image = image.crop(crop_box)
cropped_image.save("example_cropped.jpg")

6. 图像格式转换:

from PIL import Image

image = Image.open("example.jpg")

# 转换为PNG格式
image.save("example_converted.png", "PNG")

7. 为图像添加文字:

from PIL import Image, ImageDraw, ImageFont

image = Image.open("example.jpg")
draw = ImageDraw.Draw(image)

# 设置字体和大小
font = ImageFont.truetype("arial.ttf", 30)

# 在图像上添加文字
position = (50, 50)
text = "Hello, PIL!"
draw.text(position, text, font=font, fill=(255, 255, 255))

image.save("example_text.jpg")

8. 合并图像:

from PIL import Image

image1 = Image.open("example1.jpg")
image2 = Image.open("example2.jpg")

# 合并图像
merged_image = Image.blend(image1, image2, alpha=0.5)
merged_image.save("example_merged.jpg")

9. 调整图像亮度:

from PIL import Image, ImageEnhance

image = Image.open("example.jpg")

# 调整亮度
enhancer = ImageEnhance.Brightness(image)
brightness_factor = 1.5  # 增加亮度
brighter_image = enhancer.enhance(brightness_factor)
brighter_image.save("example_brightness.jpg")

 

10. 转换图像为黑白:
 

from PIL import Image

image = Image.open("example.jpg")

# 转换为黑白
black_and_white_image = image.convert("L")
black_and_white_image.save("example_black_and_white.jpg")

 

11. 图像水平翻转:

from PIL import Image

image = Image.open("example.jpg")

# 水平翻转
flipped_image = image.transpose(Image.FLIP_LEFT_RIGHT)
flipped_image.save("example_flipped.jpg")

 

12. 图像滤镜(模糊):

from PIL import Image, ImageFilter

image = Image.open("example.jpg")

# 应用模糊滤镜
blurred_image = image.filter(ImageFilter.BLUR)
blurred_image.save("example_blurred.jpg")

 

13. 组合多张图像成拼图:

from PIL import Image

image1 = Image.open("example1.jpg")
image2 = Image.open("example2.jpg")
image3 = Image.open("example3.jpg")
image4 = Image.open("example4.jpg")

# 创建一个新的空白图像,用于存放拼图
output_image = Image.new("RGB", (image1.width * 2, image1.height * 2))

# 将四张图像拼接到新图像中
output_image.paste(image1, (0, 0))
output_image.paste(image2, (image1.width, 0))
output_image.paste(image3, (0, image1.height))
output_image.paste(image4, (image1.width, image1.height))

output_image.save("example_collage.jpg")

14. 生成缩略图:

from PIL import Image

image = Image.open("example.jpg")

# 生成缩略图
thumbnail_size = (100, 100)
image.thumbnail(thumbnail_size)

image.save("example_thumbnail.jpg")

 

15.获取并修改像素值:

from PIL import Image

image = Image.open("example.jpg")

# 获取像素值
x, y = 10, 10
pixel_value = image.getpixel((x, y))
print(f"Pixel value at ({x}, {y}): {pixel_value}")

# 修改像素值
new_pixel_value = (255, 0, 0)  # 设置为红色
image.putpixel((x, y), new_pixel_value)

image.save("example_modified.jpg")

16. 图像色彩通道分离和合并:

from PIL import Image

image = Image.open("example.jpg")

# 分离色彩通道
red_channel, green_channel, blue_channel = image.split()

# 合并色彩通道
merged_image = Image.merge("RGB", (blue_channel, green_channel, red_channel))

merged_image.save("example_swapped_channels.jpg")

 

17. 图像透明度调整:
 

from PIL import Image, ImageEnhance

image = Image.open("example.png").convert("RGBA")

# 调整透明度
enhancer = ImageEnhance.Brightness(image.split()[3])
alpha_factor = 0.5  # 减少透明度
alpha_channel = enhancer.enhance(alpha_factor)
image.putalpha(alpha_channel)

image.save("example_transparency.png")

18. 图像加框:

from PIL import Image, ImageOps

image = Image.open("example.jpg")

# 为图像添加边框
border_color = (255, 0, 255)  # 紫色
border_width = 10
bordered_image = ImageOps.expand(image, border=border_width, fill=border_color)

bordered_image.save("example_bordered.jpg")

 

19. 圆形头像裁剪:

from PIL import Image, ImageDraw

image = Image.open("example.jpg")
output_size = (200, 200)

# 调整图片大小
image.thumbnail(output_size)

# 创建圆形遮罩层
mask = Image.new("L", output_size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0, output_size[0], output_size[1]), fill=255)

# 应用圆形遮罩层
circle_avatar = Image.new("RGBA", output_size, (0, 0, 0, 0))
circle_avatar.paste(image, (0, 0), mask)

circle_avatar.save("example_circle_avatar.png")

 

20. 图像直方图:

from PIL import Image

image = Image.open("example.jpg")

# 计算图像直方图
histogram = image.histogram()

# 输出RGB通道的直方图
red_hist = histogram[0:256]
green_hist = histogram[256:512]
blue_hist = histogram[512:768]

print("Red channel histogram:", red_hist)
print("Green channel histogram:", green_hist)
print("Blue channel histogram:", blue_hist)

21. 图像的灰度直方图均衡化:

from PIL import Image, ImageOps

image = Image.open("example.jpg")

# 灰度直方图均衡化
equalized_image = ImageOps.equalize(image.convert("L"))

equalized_image.save("example_equalized.jpg")

 

22. 图像反相处理:

from PIL import Image, ImageOps

image = Image.open("example.jpg")

# 反相处理
inverted_image = ImageOps.invert(image)

inverted_image.save("example_inverted.jpg")

 

23. 图像像素化:

from PIL import Image

image = Image.open("example.jpg")

# 设置像素化程度
pixel_size = 10

# 调整图像大小以实现像素化
small_image = image.resize((image.width // pixel_size, image.height // pixel_size), Image.NEAREST)
pixelated_image = small_image.resize(image.size, Image.NEAREST)

pixelated_image.save("example_pixelated.jpg")

 

24. 图像的高斯模糊:

from PIL import Image, ImageFilter

image = Image.open("example.jpg")

# 应用高斯模糊滤镜
radius = 5
gaussian_blurred_image = image.filter(ImageFilter.GaussianBlur(radius))

gaussian_blurred_image.save("example_gaussian_blur.jpg")

 

25. 图像锐化:
 

from PIL import Image, ImageFilter

image = Image.open("example.jpg")

# 应用锐化滤镜
sharpened_image = image.filter(ImageFilter.SHARPEN)

sharpened_image.save("example_sharpened.jpg")

 

以上是 PIL 库的一些常用方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

B+G双轮驱动,税友股份迎来数字化东风

配图来自Canva可画 不知不觉之间,国内的数字经济已经蔚然成潮。据相关部门的统计数据显示,去年国内数字经济规模已经达到了50万亿,占到了国内GDP总量的40%以上,增速更是持续领先于GDP增速。与此同时,随着数字中国战略…

权限提升:网站漏洞(提权思路.)

权限提升:网站漏洞 权限提升简称提权,由于操作系统都是多用户操作系统,用户之间都有权限控制,比如通过 Web 漏洞拿到的是 Web 进程的权限,往往 Web 服务都是以一个权限很低的账号启动的,因此通过 Webshell …

The Foundry Modo 16 for Mac v16.1v3 含历史版本

The Foundry MODO是一个功能强大的3D建模、动画和渲染软件,被广泛应用于游戏开发、电影制作、产品设计和建筑可视化等领域。 以下是一些MODO的优点: 1. 强大的建模工具:MODO提供了一系列丰富的建模工具,包括多边形建模、NURBS建…

mysql索引失效的坑

目录 前言 博客文章分享 对索引字段做函数操作 隐式类型转换 隐式字符编码转换 原因分析 解决方法: 前言 在MySQL中,有时候会因为语句使用不当导致sql不走索引,从而使数据库的压力变大。本篇分享一下sql不走索引的坑,让大家…

Nginx 和Rewrite

系列文章目录 文章目录 系列文章目录一、常规的nginx正则表达式1.location和rewrite的区别2.常用的nginx的正则表达式3.nginx里面的优先级 二、rewrite1.Rewrite2.实验 总结 一、常规的nginx正则表达式 1.location和rewrite的区别 从功能看 rewrite 和 location 似乎有点像&a…

GPT-2隐私泄露论文阅读:Extracting Training Data from Large Language Models

文章目录 论文地址:原文阐释:渔樵问对:原理梗概预防策略隐私策略这个新颖的攻击方式是什么?三种典型采样策略:隐私风险文章第5页第二段中提到的 memorized training exam ple 是什么意思 ThreatModel &Ethics什么是文本的zlib…

【Apache 网页与安全优化】

1.网页压缩 检查是否安装 mod_deflate 模块 apachectl -t -D DUMP_MODULES | grep "deflate"如果没有安装mod_deflate 模块,重新编译安装 Apache 添加 mod_deflate 模块 systemctl stop httpd.service cd /usr/local/httpd/conf mv httpd.conf httpd.c…

数字硬件建模SystemVerilog-通信总线建模 --Interface端口的概念

来到了SV最后一部分,预计三篇文章,两周更完,所有的思维导图如下: 概述 SystemVerilog Interface是modport的一种,但比简单的输入、输出或输入输出端口的功能更多。在其最简单的形式中,Interface端口将相关的…

关于户外旋转LED显示屏的核心技术

户外旋转LED显示屏因可视范围达360的新颖结构,并且成本低廉,而得到了迅速的发展。虽然看着外观与普通LED显示屏没有什么大的异样,但为使设计的户外旋转LED显示屏具有较好的显示效果,背后也是需要通过众多工程技术人员克服技术难点…

git lfs简易使用教程

参考资料: https://zzz.buzz/zh/2016/04/19/the-guide-to-git-lfs/ 这篇随笔简单记录一下git lfs的使用教程,只记录最为常用的部分,并阐述原理,方便后面查阅。 首先说明一下git lfs的原理,看名称:git lfs。…

电力监控系统在智能建筑电气节能中的应用

摘要:电力监控系统在智能建筑中被广泛使用,其以及时、稳定、安全、便捷的优点提高了电能使用效率,节约了成本。借助电力监控系统能准确判断故障发生原因和位置,为智能建筑的安全性和智能化发展提供了有力的支持 关键词&#xff1…

华为,找寻科技秋天里的春光

捷克导演伏拉基米尔米切尔在2001年指导了一部电影,叫做《秋天里的春光 Bab lto》。 我很喜欢这个名字,它吐露着一种简单质朴的美好。回望历史,我们会发现文明与知识经常陷入秋天,但却因为人类的一次次努力,最终我们迎来…

电脑提示vcruntime140_1.dll丢失的正确修复方法

vcruntime140_1.dll是vs2010编译的程序默认的库文件它的丢失易导致游戏、应用软件等程序运行出现错误,致使程序无法正常运行,下面小编教大家电脑提示vcruntime140_1.dll丢失的正确修复教程 首先打开一个360,搜狗等等电脑浏览器,输…

ProxySQL技术实践分享

一、ProxySQL基本介绍 1.1 前言 ProxySQL是 MySQL 的高性能、高可用性、协议感知代理。以下为结合主从复制对ProxySQL读写分离、黑白名单、路由规则等做些基本测试。 1.2 基本介绍 先简单介绍下ProxySQL及其功能和配置,主要包括: 最基本的读/写分离&…

扬帆优配|北海道拉响警报!市场惊现500亿超级空单,有何大事?

又见超级大空单! 据英国《金融时报》周三援引其剖析过的监管文件报导称,日本软银集团已开端出售其在阿里巴巴(9988.HK)简直一切剩下股份。陈述弥补说,这家由亿万富翁孙正义为创始人领导的日本集团本年经过预付远期合约…

PNAS: 这些病毒是原生动物基因组中的偷渡者

在对复杂单细胞微生物进行大规模研究时,奥地利因斯布鲁克大学生态学系的Christopher Bellas博士、Marie-Sophie Plakolb和Ruben Sommaruga教授发现了一个意外情况:微生物的基因组中找到超过30,000种先前未知的病毒DNA。这种“隐藏”的DNA可能允许宿主细胞…

5 种主流API网关技术选型,yyds

API网关是微服务项目的重要组成部分,今天来聊聊API网关的技术选型,有理论,有实战。 不 BB,上文章目录: 1 API网关基础 1.1 什么是API网关 API网关是一个服务器,是系统的唯一入口。 从面向对象设计的角…

Dubbo泛化调用返回结果对象参数丢失的问题分析

最近在使用jvm-sandbox-repeater做引流回放,针对dubbo的流量做相应的回放,结果发现一个问题dubbo接口录制的返回值与回放的返回值不一样。 问题排查 我们先看看返回的差异在什么地方 左侧是回放的流量返回结果, 右侧是录制的返回结果。 结果…

7款神仙级非常漂亮的 Linux 操作系统UI,你都用过吗

Linux 的发行版有很多,这里罗列7个漂亮的 Linux 发行版,可以说是Linux操作系统界的颜值担当了。 1、elementary OS 网站:https://elementaryos.cn elementary OS操作系统是最漂亮的Linux发行版之一。它基于macOS外观,同时为Linu…

裸机和RTOS系统区别与联系

1. 裸机和rtos的多任务处理 试想一种场景,我们正在打游戏,但女朋友在你打游戏的过程中给你发送消息,你需要回复消息 1.1 裸机处理方式 while(1) { 打游戏();回复信息(); }玩过51或者stm32的裸机编程的人都知道,我们往往会在应…