这里介绍Image模块的使用方法,想了解PIL各模块详细介绍的请点击
打开图片
im
= Image
.open("E:\mzw.jpg")
显示图片
im
.show
()
创建副本 (拷贝图片)
im_copy
= im
.copy
()
返回指定尺寸的图像的拷贝
region
= im
.resize
((100, 100))
获取图片文件的大小
size
= os
.path
.getsize
(im
)
获取图片文件的尺寸
im_size
= im
.size
创建图片
im
= Image
.new
("RGB", (128, 128), "#FF0000")
裁剪矩形区域
box
= (100,100,200,200)
im_c
= im
.crop
(box
)
图像粘贴(加水印)
im
.paste
(im_c
,(100,100),None)
颜色通道分离
r
,g
,b
= im
.split
()
r
.show
()
g
.show
()
b
.show
()
颜色通道合并
im_merge
= Image
.merge
("RGB",[b
,r
,g
])
查找gif 针图片
im_gif
= Image
.open("E:\mzw.gif")
print(im_gif
.mode
)
im_gif
.show
()
im_gif
.seek
(3)
im_gif
.show
()
im_gif
.seek
(9)
im_gif
.show
()
图片 大小 尺寸压缩DEMO
导入包
from PIL
import Image
import os
获取图片文件的大小
def get_size(file):
size
= os
.path
.getsize
(file)
return size
/ 1024
拼接输出文件地址
def get_outfile(infile
, outfile
):
if outfile
:
return outfile
dir, suffix
= os
.path
.splitext
(infile
)
outfile
= '{}-out{}'.format(dir, suffix
)
return outfile
压缩文件到指定大小
def compress_image(infile
, outfile
='', mb
=150, step
=10, quality
=80):
"""不改变图片尺寸压缩到指定大小
:param infile: 压缩源文件
:param outfile: 压缩文件保存地址
:param mb: 压缩目标,KB
:param step: 每次调整的压缩比率
:param quality: 初始压缩比率
:return: 压缩文件地址,压缩文件大小
"""
o_size
= get_size
(infile
)
if o_size
<= mb
:
return infile
outfile
= get_outfile
(infile
, outfile
)
while o_size
> mb
:
im
= Image
.open(infile
)
im
.save
(outfile
, quality
=quality
)
if quality
- step
< 0:
break
quality
-= step
o_size
= get_size
(outfile
)
return outfile
, get_size
(outfile
)
修改图片尺寸
def resize_image(infile
, outfile
='', x_s
=1376):
"""修改图片尺寸
:param infile: 图片源文件
:param outfile: 重设尺寸文件保存地址
:param x_s: 设置的宽度
:return:
"""
im
= Image
.open(infile
)
x
, y
= im
.size
y_s
= int(y
* x_s
/ x
)
out
= im
.resize
((x_s
, y_s
), Image
.ANTIALIAS
)
outfile
= get_outfile
(infile
, outfile
)
out
.save
(outfile
)
图片裁剪
def cropImg(path
):
img
= Image
.open(path
)
x
= img
.size
[0]
y
= img
.size
[1]
h
= 50
cropped
= img
.crop
((0, 0, x
, y
- h
))
cropped
.save
(path
)
图片拼接
def join(png1
, png2
, size
):
img1
, img2
= Image
.open(png1
), Image
.open(png2
)
size1
, size2
= img1
.size
, img2
.size
joint
= Image
.new
('RGB', (size1
[0], size1
[1] + size2
[1] - size
))
loc1
, loc2
= (0, 0), (0, size1
[1] - size
)
joint
.paste
(img2
, loc2
)
joint
.paste
(img1
, loc1
)
joint
.save
(result
)
如果同时有修改尺寸和大小的需要,可以先修改尺寸,再压缩大小
转载请注明原文地址:https://tech.qufami.com/read-22481.html