python批量图片压缩

瞎扯几句

哎,开头总喜欢瞎扯几句,今天本来,啥都挺好,前两天整了个json转png的代码,今天去用他批量转换的时候,就很离谱,它·······尽然报错了,离谱,简直就是“离谱他妈给离谱开门,离谱到家了”开始找了老半天bug,只定位出了bug出现在哪。json文件太大了(原谅我的愚蠢,尽然用初始原图进行标注,这文件不大等谁李),好在最后再师兄的帮助下解决了。那么以后要对图像压缩再标注,哎··问题来了,压缩那不得整个代码。刚好用来练手。

撤了老半天终于回到正题了。

那么开始整。

参考博客:(108条消息) python 实现图像的无损压缩_云中寻雾的博客-CSDN博客_python无损压缩图片https://blog.csdn.net/qq_36387683/article/details/100579736

一、利用opencv

import cv2

img=cv2.imread("G:/1.jpg",1)
# 转为jpg格式
# [cv2.IMWRITE_JPEG_QUAITY,50] 指定图像保存时的品质,降低品质可以实现图像的压缩。
# 其中,50是可以改变的,取值为[0,100]

cv2.imwrite("G:/11.jpg",img,[cv2.IMWRITE_JPEG_QUALITY,50])

#转为png格式
# [cv2.IMWRITE_PNG_COMPRESSION,0]是调整PNG图像的压缩比。
# 为0时,压缩比最小,图像的品质最好。它的压缩范围为[0,9]

cv2.imwrite("G:/11.png",img,[cv2.IMWRITE_PNG_COMPRESSION,0])


二、利用PIL进行图像压缩

import PIL.Image as Image

img2 = Image.open("G:/1.jpg")

# quality参数: 保存图像的质量,值的范围从1(最差)到95(最佳)。 默认值为75,使用中应尽量避免高 
# 于95的值; 100会禁用部分JPEG压缩算法,并导致大文件图像质量几乎没有任何增益。
# subsampling参数:子采样,通过实现色度信息的分辨率低于亮度信息来对图像进行编码的实践
# (自己尝试)可能的子采样值是0,1和2,对应于4:4:4,4:2:2和4:1:1(或4:2:0?)。

img2.save(r'G:/2.jpg', quality=quality, subsampling=0)

三、实现批量压缩

自己新建工程,把代码粘贴进去就能用了,前提把需要的包装了。

今天遇到的问题,原始文件路径和存储压缩后文件路径中均不能有中文路径。

切记!切记!

#
import cv2
import os
import numpy as np
from PIL import Image


def pic_compress_png(image_path,new_image_path):
    '''
    将图片压缩成png格式
    :param image_path:  原始文件路径
    :param new_image_path:  保存文件路径
    :return:
    '''
    files = os.listdir(image_path)  # 获取当前路径下的所有文件名字
    files = np.sort(files)         #按名称排序
    i = 0
    for f in files:
        imgpath = image_path + f   #路径+文件名字
        img = cv2.imread(imgpath, 1)   #读取图片
        dirpath = new_image_path       #压缩后存储路径
        file_name, file_extend = os.path.splitext(f)   #将文件名的,名字和后缀进行分割
        dst = os.path.join(os.path.abspath(dirpath), file_name + '.png')  #文件最终保存的路径及名字(名字和压缩前的名字一致),
        print(os.path.join(dirpath,"1.png"))  #打印压缩缓存文件路径
        shrink = cv2.resize(img, (4864,1024), interpolation = cv2.INTER_AREA) #对图像的大小进行resize   4864 *1024
        cv2.imwrite(os.path.join(dirpath,"1.png"), shrink, [cv2.IMWRITE_PNG_COMPRESSION, 1]) #对图像进行压缩 【cv2.IMWRITE_PNG_COMPRESSION, 1】
                                                                                            #v2.IMWRITE_PNG_COMPRESSION  压缩品质 0-10 ,数字越小压缩比越小
        img1 = Image.open(os.path.join(dirpath,"1.png"))    #打开压缩后的缓冲文件
        img1.save(dst,quality=70)                          #二次压缩,并保存位原始文件的文件名
        os.remove(os.path.join(dirpath,"1.png"))           #删除缓存文件



# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    image_path = r'C:/Users/shulei/Desktop/data_shu/4/'  # 原始文件路径
    new_image_path = r'C:/Users/shulei/Desktop/data_shu/luo/' # 压缩后文件保存路径
    pic_compress_png(image_path,new_image_path)
    print("压缩完成")

# See PyCharm help at https://www.jetbrains.com/help/pycharm/

到此结束

工程代码:deepling/pic_compress_png at pic_compress_png · xiaobailong-ui/deepling (github.com)icon-default.png?t=M1L8https://github.com/xiaobailong-ui/deepling/tree/pic_compress_png/pic_compress_png

再瞎扯几句:

        初次学习,有错误之处,也可以帮忙改正一下,谢谢

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值