精华内容
下载资源
问答
  • 网上下载的小姐姐套图合集因为原图非常大,一张图十几或者几十M,一套图下来总共可能上百G,所以需要批量压缩处理一下,虽然PS也可以办到,但是代码更灵活,写个Python程序处理了一下,讲每张图长宽缩为2分之1,大小实际缩小...

    网上下载的小姐姐套图合集因为原图非常大,一张图十几或者几十M,一套图下来总共可能上百G,所以需要批量压缩处理一下,虽然PS也可以办到,但是代码更灵活,写个Python程序处理了一下,讲每张图长宽缩为2分之1,大小实际缩小到了十几分之一。这样就省下硬盘空间了

    import os
    import imghdr
    from PIL import Image
    # path是文件读取路径,save_path是保存路径
    def handle_image(path,sub_path,file):
        im = Image.open(path)
        # im.show()
        (x, y) = im.size # 读取图片大小
        # 图片的长宽变为原来的2分之1
        # new_x = 1920
        # new_y = round(y/x*1920)
        size=os.path.getsize(path)#获取文件大小
        if x > 2000 and size >2000000 :#限定图片宽度大于1000像素,并且大于1MB的财才进行处理
            new_x = x//2
            new_y = y//2
            out = im.resize((new_x, new_y), Image.ANTIALIAS)
            newfile = file.replace('.', '_resize.')  # 修改文件名
            savepath = os.path.join(sub_path, newfile)  # 用文件名拼接保存路径
            out.save(savepath)
            print('%s压缩处理完成' % savepath)
    
        # 如果图片尺寸或者大小不满足压缩条件直接复制
        else:
            savepath = os.path.join(sub_path, file)  # 用文件名拼接保存路径
            f1 = open(path, 'rb')
            f2 = open(savepath, 'wb')
            while True:
                file = f1.read()
                if file:
                    f2.write(file)
                else:
                    print('%s未做处理,直接复制'%savepath)
                    break
    
    # root_path=r'C:\Users\wangjinyu\Desktop\myimage'#原始文件路径
    root_path=r'E:\新建文件夹\轰趴猫 全集3'#原始文件路径
    # new_path = r'C:\Users\wangjinyu\Desktop\new'#要拷贝到的新路径
    new_path = r'E:\新建文件夹\轰趴猫 压缩3'#要拷贝到的新路径
    for root, dirs, files in os.walk(root_path):
        # print(root)
        # print(dirs)
        new_root_path = root.split(root_path)[1]#生成拼接的路径
        os.mkdir(new_path + new_root_path)#在新路径创建对应文件夹
        sub_path=new_path + new_root_path#获取刚创建的文件夹路径
        for  file in files:
            file_path=os.path.join(root,file)
            # print(root)
            if imghdr.what(file_path) is not None:#判断是不是图片文件,如果不是图片就会返回None
                #加异常处理,有时候碰到损坏的图片会报错,程序就停了,加完异常处理就可以继续执行了
                try:
                    handle_image(file_path,sub_path,file)#更改文件尺寸并保存到新路径
                except:
                    print('%s处理异常'%file_path)
                else:
                    pass
    

     

    展开全文
  • Python批量压缩图片,无大小限制 需求分析 在网站上传图片时,发现对图片的大小有要求,需要对大量的图片进行压缩 自己搭建网站的时候,也会希望服务器上的图片越小越好 百度一下,你就收费 百度一下【图片压缩】,...

    任性!Python批量压缩图片,无大小限制

    需求分析

    在网站上传图片时,发现对图片的大小有要求,需要对大量的图片进行压缩
    自己搭建网站的时候,也会希望服务器上的图片越小越好

    百度一下,你就收费

    百度一下【图片压缩】,弹出来的那些可以在线压缩的网站,要不对图片的数量、要不对图片的大小有要求,最后一般都会提醒你去充值会员。。

    tinypng

    google后发现了一个不错的网站https://tinypng.com/
    但也有限制:最多20张图片,每张不能超过5MB,我刚好两个都不满足。。。

    然后在它的网站上找到了 【DEVELOPER API】里面提供了python第三方库tinify
    tinify支持一个月最多500张图片压缩,且不限制图片大小,已经能满足大部分人的需求了。
    需要先在网站上用邮箱注册一下,然后拿到API-key才可以使用
    安装很简单

    pip install --upgrade tinify
    

    使用也很简单

    # coding=utf-8
    # @Time : 2020/6/20 9:39 
    # @Author : mxz
    # @File : image_zip.py 
    # @Software: PyCharm
    
    import tinify
    import os
    
    tinify.key = ''
    path = r""
    
    for root, dirs, files in os.walk(path):
        for file in files:
            imgpath = os.path.join(root, file)
            print("compressing ..."+ imgpath)
            tinify.from_file(imgpath).to_file(imgpath)
    

    补充

    实际运行来看压缩一张图片需要的时间较长,不要以为是程序出错了
    tinify除了支持压缩图片,还支持裁剪图片、给图片加metadata、保存到亚马逊和谷歌服务器的功能
    具体见文档
    https://tinypng.com/developers/reference/python

    另外,tinypng网站实际提供了
    HTTP、RUBY、PHP、NODE.JS、PYTHON、JAVA、.NET的api

    展开全文
  • file_path = ', write_file_path) im.save(write_file_path) except: traceback.print_exc() def resize_image_work(file_path, file_out, width=800, height=800): """ 重置图片大小 """ image = Image.open(file_...
    import os
    import traceback
    from PIL import Image
    import os
    import time
    import whatimage
    # import pyheif
    from werkzeug.utils import secure_filename
    from PIL import Image, ExifTags
    import matplotlib.image as mpimg
    
    
    save_img_path = 'image_after/'
    
    
    def save_new_image_format(now_path, origin_img_file_path, to_format):
        try:
            im = Image.open(origin_img_file_path)
            new_file_name = os.path.splitext(origin_img_file_path)[0].split('/')[-1] + to_format
            new_save_path = os.path.join(now_path, save_img_path)
            if not os.path.exists(new_save_path):
                os.makedirs(new_save_path)
            write_file_path = os.path.join(new_save_path, new_file_name)
            print('write_file_path = ', write_file_path)
            im.save(write_file_path)
        except:
            traceback.print_exc()
    
    
    def resize_image_work(file_path, file_out, width=800, height=800):
        """
        重置图片大小
        """
        image = Image.open(file_path)
        flag = False
        w, h = image.size
        # print('w = {} h = {} image.size = {}'.format(w, h, image.size))
        # print('ExifTags.TAGS.keys() = {}'.format(ExifTags.TAGS.keys()))
        try:
            orientation = 0
            for orientation in ExifTags.TAGS.keys():
                if ExifTags.TAGS[orientation] == 'Orientation':
                    break
            exif = dict(image._getexif().items())
            # print('exif = {}'.format(exif))
            # print('exif。keys = {}'.format(exif.keys()))
            if exif[orientation] == 3:
                image = image.rotate(180, expand=True)
                flag = True
            elif exif[orientation] == 6:
                image = image.rotate(270, expand=True)
                flag = True
            elif exif[orientation] == 8:
                image = image.rotate(90, expand=True)
                flag = True
            lena = mpimg.imread(file_path)
            if flag:
                w, h = lena.shape
        except:
            w, h = image.size
        finally:
            # current_app.logger.info(" resize_info: {}, {}, {}".format(w, h, flag))
            print(" resize_info: {}, {}, {}".format(w, h, flag))
            # 判断宽度和高度
            # 判断大小
            # if w <= width and h <= height:
            #     return file_path
            if (1.0 * w / width) > (1.0 * h / height):  # 宽大于高
                scale = 1.0 * w / width
                new_image = image.resize((int(w / scale), int(h / scale)), Image.ANTIALIAS)
            else:
                scale = 1.0 * h / height
                new_image = image.resize((int(w / scale), int(h / scale)), Image.ANTIALIAS)
            # 保存图片
            new_image = new_image.convert("RGB")
            new_image.save(file_out)
            return file_out
    
    
    if __name__ == "__main__":
        now_path = os.getcwd()
        print('now_path = ', now_path)
    
        origin_dir_name = '../inspiration/origin_inspiration'
    
        origin_img_file_path = os.path.join(now_path, origin_dir_name)
        print('origin_img_file_path = ', origin_img_file_path)
    
        for root, dirs, files in os.walk(origin_img_file_path):
            # print('root = ', root)
            # print(dirs)
            # print(files)
            i = 1
            for img_file_name in files:
                img_file_path = os.path.join(root, img_file_name)
                print('--------- img_file_path = {}'.format(img_file_path))
                out_file_path = img_file_path.replace('origin_inspiration', 'inspiration_resize')
                print('--------- out_file_path = {}'.format(out_file_path))
    
                resize_image_work(img_file_path, out_file_path, width=800, height=800)
    
                # 格式变化
                # save_new_image_format(now_path, img_file_path, '.jpg')
                print(i)
                i += 1
    
    

     

    展开全文
  • 最近在做图像识别的时候,遇到了一个问题,图片很多并且图像比较大,没有办法上传到服务器,于是想到了用 python 批量压缩。 用到 PIL 库,PIL 是 Python 平台事实上的图像处理标准库,支持多种格式,并提供强大的...

    需求:

    最近在做图像识别的时候,遇到了一个问题,图片很多并且图像比较大,没有办法上传到服务器,于是想到了用 python 批量压缩。

    用到 PIL 库,PIL 是 Python 平台事实上的图像处理标准库,支持多种格式,并提供强大的图形与图像处理功能。使用如下命令安装:

    pip install pillow
    

    效果图如下:
    维持原目录结构

    代码如下:

    注意:

    1. 如果你的图片有其他图片后缀名(比如:bmp)直接在 suffix 数组中添加即可
    2. 控制 save(dstFile, quality=80, subsampling=0) 中的 quality 即可控制图片大小
    3. 如果希望控制图片尺寸,修改 resize((int(w), int(h)) w 和 h 即可
    4. 替换 srcPath(图片原始路径)和 dstPath (图片生成路径)路径即可使用
    from PIL import Image
    import os
    
    # 图片原始存放路径
    srcPath = r'E:\图片\convert'
    # 图片最后存放到什么路径
    dstPath = r'E:\图片\to'
    
    def compressImage(srcPath, dstPath):
        suffix = ['.jpg', '.png', '.jpeg']
        for dirpath, dirnames, files in os.walk(srcPath):
            for file in files:
                file_path = os.path.join(dirpath, file)
                for fix in suffix:
                    if file.endswith(fix):
                        srcFile = os.path.join(dirpath, file)
                        floder = dirpath.split('\\')[-1]
                        dstFloder = os.path.join(dstPath, floder)
                        if not os.path.exists(dstFloder):
                            os.makedirs(dstFloder)
                        dstFile = os.path.join(dstFloder, file)
                        try:
                            img = Image.open(srcFile)
                            w, h = img.size
                            # 设置压缩尺寸和选项,注意尺寸要用括号!!!
                            dImg = img.resize((int(w), int(h)), Image.ANTIALIAS)
                            # 压缩图片质量,控制quality的值即可!!!
                            dImg.save(dstFile, quality=80, subsampling=0)
                            print(dstFile + " 成功!")
                        except Exception:
                            print(dstFile + "失败!")
    
    if __name__ == '__main__':
        compressImage(srcPath, dstPath)
    
    
    展开全文
  • python脚本编程:批量压缩图片大小

    万次阅读 2015-12-10 13:20:06
    需要安装第三方模块PIL代码#coding:...import os#图片压缩批处理 def compressImage(srcPath,dstPath): for filename in os.listdir(srcPath): #如果不存在目的目录则创建一个,保持层级结构 if not os.path.exi
  • Google 又开源了,这次开源了一款图像...今天玩了下谷歌的开源图片压缩工具Guetzli,发现单张图片压缩效果还是不错的,就写了个简单的python脚本,批量压缩图片 前提条件 1.安装好Guetzli,可以使用命令行工具 2.py
  • 那么接下来,我就跟大家分享一个批量压缩图片的方法,只需几行python代码,即可轻松实现图片压缩。 查看原文 压缩算法 用到PIL库,PIL是Python平台事实上的图像处理标准库,支持多种格式,并提供强大的图形与图像...
  • 使用Python批量图片进行压缩处理

    千次阅读 2018-10-01 18:15:18
    这两天在对网站服务器进行迁移的过程中...怎么批量把网站上所有图片批量调整一下分辨率进行空间压缩,嘿~您别说,Python还真对得起咱zei张脸,简直不能好用更多。废话不说了,直接走起~ 任务目标 对指定文件夹中...
  • 本文一步步为你介绍,如何用Python自动判断多张图片中哪些超出阈值需要压缩,且保持宽高比。如果你想了解Python图像处理的基础知识,欢迎动手来尝试。 痛点 我喜欢用Markdown写文稿,然后发布到不同写作平台...
  • python批量修改图图片大小以及图片灰度与RGB之间转换 """修改图像大小""" # import os # from PIL import Image # import numpy as np # import cv2 # # def crop_center(img, cropx, cropy): # y, x = img.shape # ...
  • 因为高清大图放到网站上会严重拖慢加载速度,或是有的地方明确限制了图片大小,因此,为了完成工作,他们总是需要先把图片压缩,再上传。 当需要处理的图片多至十张、百张、千张,则严重影响工作效率。这时候,就...
  • Python图片批量压缩到指定大小并将JPG转为PNG格式代码如下: #!/usr/bin/python # -*- coding: UTF-8 -*- """ @author:ZSW @file:picture_compress.py @time:2020/08/06 """ import base64 import io import os ...
  • 主要介绍了python opencv 批量改变图片的尺寸大小的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 介绍 BPG(Better Portable Graphics)是一种新的图像格式。...大多数Web浏览器都支持小型Javascript解码器(gzip压缩大小:56 KB)。 基于HEVC开放视频压缩标准的子集。 支持与JPEG(灰度,YCbCr 4:2:0,4:2:2,...
  • 熟悉 “Python猫” 的读者应该知道,猫哥我发布的所有文章都使用了极具特色的配图——原创文章使用猫图,转载则使用狗图,极少例外。 这几天,我在用 Github page + hexo 搭建个人网站,为了延续...批量压缩图片,现...
  • 熟悉 “Python猫” 的读者应该知道,猫哥我发布的所有文章都使用了极具特色的配图——原创文章使用猫图,转载文章使用狗图,极少例外。另外注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心...
  • 最近在学习PCA算法,用PCA对图片进行降维,图片...我选择用python语言来编程实现批量将彩色图转为灰度图。代码如下,有注释。from skimage import io,transform,colorimport numpy as npdef convert_gray(f,**args...
  • 环境:Ubuntu16.04、python3.5 直接上代码,只需要修改文件夹地址1fpath和尺寸大小size就可以用了。 from PIL import Image import os from glob import glob # 首先根据自己图片文件夹修改文件夹地址 fpath = &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,392
精华内容 1,756
关键字:

python批量压缩图片大小

python 订阅