一、用Python对图像进行处理
- 1 图像的基础知识
- 2 用Python玩转图像
图片就是一种文件,一堆信息的载体,一种数据
图片文件格式
- RAW格式
- BMP格式
- PCX格式
- TIFF格式
- GIF格式
- JPEG格式
- TGA格式
- EXIF格式
- FPX格式
- SVG格式
- PSD格式
- CDR格式
- PCD格式
- DXF格式
- UFO格式
- EPS格式
- PNG格式
图片的分类
- 栅格(位图)(放大会失真):常见图 片,照片
- 矢量(图形)(放大不影响清晰度):插图,CAD,遥感
颜色模型
常见的模型包括
- HSB (表示色相、饱和度、亮度):基于人类对颜色的感觉
- RGB (表示红、绿、蓝):三色光,视频,显示器
- CMYK(表示青、洋红、黄、黑):油墨,打印四色印刷
- CIE Lab:颜色度量国际标准,与设备无关
大小
- KB, MB, GB
坐标
- 从左上角开始(0, 0)
应用
- 照片
- 图标
- 页面图片
- 卫星遥感
- 地图
二、使用python处理图像
2.1、安装pillow
安装结束后,从PIL库中导入ImageColor
pip install pillow
导入操作
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PIL import ImageColor
查看颜色RGB值
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PIL import ImageColor
print(ImageColor.getcolor('red', 'RGB')) # 红色RGB值
print(ImageColor.getcolor('red', 'RGBA')) # 透明度
>>>
(255, 0, 0)
(255, 0, 0, 255)
2.2、做一个缩略图
下面我将以这张图作为本章案例:
使用Image
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from PIL import ImageColor
from PIL import Image # 导入Image
os.chdir(r"F:\Python_yanzan2018\YanKai_Python_Advanced\YanKai_image\core") # 进入图像的目录
IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
print(f"图片的格式为:{IM.format},图片的尺寸为:{IM.size},图片的模式:{IM.mode}") # 获取图像相关信息
>>>图片的格式为:JPEG,图片的尺寸为:(793, 726),图片的模式:RGB
获得图像尺寸
IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
A, B = IM.size
print(A, B)
>>>
>793 726
原图尺寸为:
793x726
将此图像缩放到50%如下:
缩放50% 也就是793/2-----726/2
IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
A, B = IM.size
print(f"这是没有缩略前的图片尺寸:{A}x{B}")
IM.thumbnail((A//2, B//2))
print(f"这是缩略后图片的尺寸{A//2}x{B//2}")
IM.save('timg.jpg', 'jpeg')
>>>
这是没有缩略前的图片尺寸:793x726
这是缩略后图片的尺寸396x363
打开验证
缩略后的图片尺寸缩略前图像尺寸
使用.show()方法在本地打开图片
IM.show() # 显示图片
使用
.resize()调整大小
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from PIL import ImageColor
from PIL import Image # 导入Image
os.chdir(r"F:\Python_yanzan2018\YanKai_Python_Advanced\YanKai_image\core") # 进入图像的目录
IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
# print(f"图片的格式为:{IM.format},图片的尺寸为:{IM.size},图片的模式:{IM.mode}") # 获取图像相关信息
IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
A, B = IM.size
print(f"这是没有缩略前的图片尺寸:{A}x{B}")
IM.thumbnail((A//2, B//2))
print(f"这是缩略后图片的尺寸{A//2}x{B//2}")
IM.save('timg2.jpeg', 'jpeg')
IM_size = IM.resize((A//4, B//4)) # 调整大小
IM_size.save('timg3.jpeg', 'jpeg')
将图像变高
将图像变高方法:高//3 宽//4 即可 如果还要更高则 高不变 宽//2 如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from PIL import ImageColor
from PIL import Image # 导入Image
os.chdir(r"F:\Python_yanzan2018\YanKai_Python_Advanced\YanKai_image\core") # 进入图像的目录
IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
# print(f"图片的格式为:{IM.format},图片的尺寸为:{IM.size},图片的模式:{IM.mode}") # 获取图像相关信息
IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
A, B = IM.size
IM_size = IM.resize((A//4, B)) # 调整大小 宽/高
IM_size.save('timg6.jpeg', 'jpeg')
如何变宽???
如何增强效果?
使用ImageEnhance增强图像效果
左侧为:增强前, 右侧为:增强后代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from PIL import ImageColor
from PIL import Image
from PIL import ImageEnhance
os.chdir(r"F:\Python_yanzan2018\YanKai_Python_Advanced\YanKai_image\core") # 进入图像的目录
IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
# print(f"图片的格式为:{IM.format},图片的尺寸为:{IM.size},图片的模式:{IM.mode}") # 获取图像相关信息
IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
A, B = IM.size
enh = ImageEnhance.Contrast(IM)
enh.enhance(1.8).show("30% 增强对比度")
IM.save('timg9.jpeg', 'jpeg')
裁剪图像
box = (100, 100, 400, 400)
region = IM.crop(box)
region.save('timg15.jpeg')
如何旋转图像
为了明显表示,以下猫作为旋转图像
IM.rotate(90).save("90度旋转.jpg")
IM.rotate(180).save("180度旋转.jpg")
IM.rotate(40).save("40度旋转.jpg")
如何镜像翻转
IM.transpose(Image.FLIP_LEFT_RIGHT).save("cat-水平.jpg")
IM.transpose(Image.FLIP_TOP_BOTTOM).save("cat-上下.jpg")
2.3、给图片加个水印
原图如下:水印图如下:
代码如下:
# 打开logo文件
log_image = Image.open('tj.jpeg')
log_image_w, log_image_h = log_image.size
# 打开目标文件
ret_image = Image.open('cat1.jpeg')
ret_image_w, ret_image_h = ret_image.size
# 粘贴:
image_copy = ret_image.copy()
image_copy.paste(log_image, (ret_image_w-log_image_w, ret_image_h-log_image_h))
image_copy.save('cat_logo.jpg')
如何创建新图像:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from PIL import ImageColor
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageDraw, ImageFont
IM_new = Image.new('RGBA', (500, 500), 'white') # 创建模式为:RGBA,500x500尺寸,white 背景
pic = ImageDraw.Draw(IM_new) # 通过ImageDraw.Draw 创建图像
pic.text((100, 100), 'Yankerp Is ok!', fill='red') # 在100x100位置输入Yankerp is ok 字体,颜色为red
IM_new.save('image_text.png') # 保存为新的图片
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from PIL import ImageColor
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageDraw, ImageFont
fonts_file = r'C:\Windows\Fonts\simhei.ttf' # 定义windows字体位置
font = ImageFont.truetype(fonts_file, 30) # 选择字体类型以及字体大小
IM_new = Image.new('RGBA', (500, 500), 'white') # 创建RGBA 定义白色背景
pic = ImageDraw.Draw(IM_new) # 创建图像
pic.text((100, 100), 'Yankerp Is ok!', fill='red', font=font) # 写入Yankerp is ok 红色字体 字体选择font
IM_new.save('font_image.png') # 保存新的图片