首先我们安装python库:
pip install pillow
- 1
原图500kb左右:
图像压缩:
优点:能够按照所需的压缩大小进行分步压缩最大程度的保存了图像的可用性
from PIL import Image
from PIL import ImageFilter
from PIL import ImageEnhance
import os
def get_size(file):
# 获取文件大小:KB
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=0, step=10, quality=80):
"""不改变图片尺寸压缩到指定大小
:param infile: 压缩源文件
:param outfile: 压缩文件保存地址
:param mb: 压缩目标,KB
:param step: 每次调整的压缩比率
:param quality: 初始压缩比率
:return: 压缩文件地址,压缩文件大小
"""
mb = int(input("请输入你要期望的压缩值(kb):"))
step = int(input("请输入每次调整的压缩比率:"))
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)
压缩后的图片可以设定你要压缩的大小这里显示的是200kb后的
可以通过自己设定的方法改变图像的长宽:
def resize_image(infile, outfile, x_s=100):
"""修改图片尺寸
:param infile: 图片源文件
:param outfile: 重设尺寸文件保存地址
:param x_s: 设置的宽度
:return:
"""
im = Image.open(infile)
x, y = im.size
x_s = int(input("输入要压缩成的图片宽度:"))
y_s = int(input("输入要压缩成的图片长度:"))
out = im.resize((x_s, y_s), Image.ANTIALIAS)
outfile = get_outfile(infile, outfile)
out.save(outfile)
之后咱们都可以对jpg进行操作
将其另存为PNG:
def repng(infile, outfile):
im = Image.open(infile)
im.save(outfile)
变为黑白老照片将图片的rgb颜色改变成L:
PIL有九种不同模式: 1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。
img.convert('1')
为二值图像,非黑即白。每个像素用8个bit表示,0表示黑,255表示白。
为灰度图像,每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。
转换公式:L = R * 299/1000 + G * 587/1000+ B * 114/1000。
def black_image(infile, outfile):
im = Image.open(infile).convert('L')
im.save(outfile)
通过增强图像的色彩通道提高图像的颜色性:
def morecolor(infile, outfile):
im = Image.open(infile)
r, g, b = im.split()
om = Image.merge("RGB",(b, g, r))
om.save(outfile)
有时候要一些图像的模糊的操作:
ImageFilter类中预定义了如下滤波方法:
• BLUR:模糊滤波
• CONTOUR:轮廓滤波
• DETAIL:细节滤波
• EDGE_ENHANCE:边界增强滤波
• EDGE_ENHANCE_MORE:边界增强滤波(程度更深)
• EMBOSS:浮雕滤波
• FIND_EDGES:寻找边界滤波
• SMOOTH:平滑滤波
• SMOOTH_MORE:平滑滤波(程度更深)
• SHARPEN:锐化滤波
• GaussianBlur(radius=2):高斯模糊
def mohu(infile, outfile):
im = Image.open(infile)
om = im.filter(ImageFilter.BLUR)
om.save(outfile)
轻松获取她的轮廓:
def get_lunkuo(infile, outfile):
im = Image.open(infile)
om = im.filter(ImageFilter.CONTOUR)
om.save(outfile)
最后增强一下对比度,为初始的n倍:
def more_duibi(infile, outfile):
im = Image.open(infile)
om = ImageEnhance.Contrast(im)
n = int(input("请输入要增强的倍数:"))
om.enhance(n).save(outfile)
增强锐度
增强锐度:
def more_ruidu(infile, outfile):
im = Image.open(infile,'r')
#im.show()
# 锐度增强
enh_sha = ImageEnhance.Sharpness(im)
sharpness = 10.0
image_sharped = enh_sha.enhance(sharpness)
image_sharped.save(outfile)