基于python中pl库的图像的压缩及其各种操作

首先我们安装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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-lyslyslys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值