精华内容
下载资源
问答
  • Python压缩图片

    千次阅读 2019-04-09 14:02:50
    resp = urllib.request.urlopen(imgurl) image = np.asarray(bytearray(resp.read()), dtype="uint8") image = cv.imdecode(image, cv.IMREAD_COLOR) #双三次插值 height,width = image.shape[:2] #获取原图像...
    	
    	resp = urllib.request.urlopen(imgurl)
    	image = np.asarray(bytearray(resp.read()), dtype="uint8")
    	image = cv.imdecode(image, cv.IMREAD_COLOR)
    
    	#双三次插值
    	height,width = image.shape[:2]  #获取原图像的水平方向尺寸和垂直方向尺寸。
    	res = cv.resize(image,(int(0.3*width),int(0.3*height)),interpolation=cv.INTER_AREA)
    
    	imge = Image.fromarray(cv.cvtColor(res,cv.COLOR_BGR2RGB))
    	# 创建滤波器,使用不同的卷积核
    	gary2 = imge.filter(ImageFilter.DETAIL)
    
    	#图像点运算
    	gary3=gary2.point(lambda i:i*0.9)
    
    展开全文
  • 转自:scipy笔记—scipy.misc.imresize用法(方便训练图像数据) ...from skimage.transform import resize # 压缩图片 # 将图片压缩为指定尺寸 num_px = 64 my_image = resize(image, output_shape=(n

    转自:scipy笔记—scipy.misc.imresize用法(方便训练图像数据)

    from skimage.transform import resize  # 压缩图片
    def predict_my_image(image_name, y, parameters=parameters):
        image = plt.imread(r'..\data\L1w4_data\%s.png'%image_name)
        
        # 重塑形状 1.转为64*64*3; 2.转为12288*1一个样本
        my_image = resize(image, output_shape=(num_px, num_px))
        # 将图片压缩为指定尺寸
        my_image = my_image.reshape((y, num_px * num_px * 3)).T
        
        my_image_pre = predict(my_image, 1, parameters).squeeze()
        cat_dic = {'0':'no-cat', '1':'cat'}
        plt.title(f"it's {cat_dic[str(int(my_image_pre))]}")
        plt.imshow(image)
    
    import matplotlib.pyplot as plt
    image = plt.imread('..\data\L1w2_data\手写猫猫1.jpg')
    plt.imshow(image)
    

    在这里插入图片描述

    from skimage.transform import resize  # 压缩图片
    
    # 将图片压缩为指定尺寸
    num_px = 64
    my_image = resize(image, output_shape=(num_px, num_px))
    plt.imshow(my_image)
    my_image = my_image.reshape((1, num_px * num_px * 3)).T
    my_image.shape
    

    在这里插入图片描述

    展开全文
  • """压缩图片尺寸直到某一尺寸 :param imagefile: 原图路径 :param targetfile: 保存图片路径 :param targetsize: 目标大小,单位byte """ currentsize = os.path.getsize(imagefile) for quality in range...
    def compress_under_size(imagefile, targetfile, targetsize):
        """压缩图片尺寸直到某一尺寸
    
        :param imagefile: 原图路径
        :param targetfile: 保存图片路径
        :param targetsize: 目标大小,单位byte
        """
        currentsize = os.path.getsize(imagefile)
        for quality in range(99, 0, -1):  # 压缩质量递减
            if currentsize > targetsize:
                image = Image.open(imagefile)
                image.save(targetfile, optimize=True, quality=quality)
                currentsize = os.path.getsize(targetfile)
    
    
    if __name__ == '__main__':
        imagefile = './input/t1.jpg'  # 图片路径
        targetfile = './output/zm.jpg'  # 目标图片路径
        targetsize = 2048 * 1024  # 目标图片大小
        compress_under_size(imagefile, targetfile, targetsize)  # 将图片压缩到2M
    
    展开全文
  • python压缩图片和视频

    千次阅读 2019-05-09 13:22:09
    往往要进行图片的传输和视频的传输,但因为用户上传的图片和视频所占用的大小问题而导致占用服务器的空间多,并且用户访问这些图片的时候因为图片或视频太大而长时间加载,所以要对用户上传的视频和图片进行压缩,...

    引言

    在真实项目中,往往要进行图片的传输和视频的传输,但因为用户上传的图片和视频所占用的大小问题而导致占用服务器的空间多,并且用户访问这些图片的时候因为图片或视频太大而长时间加载,所以要对用户上传的视频和图片进行压缩,减少服务器的占用空间和加载时间。

    1.新建一个类

    我们先新建一个保存图片或视频的一个类

    import platform
    
    class Compress_Pic_or_Video(object):
        def __init__(self,filePath,inputName,outName=""):
            self.filePath = filePath  #文件地址
            self.inputName = inputName  #输入的文件名字
            self.outName = outName  #输出的文件名字
            self.system_ = platform.platform().split("-",1)[0]	#判断是那个操作系统,因为我的服务器是Linux的但我电脑是windows的,所以只设置了这两个系统的判断
            if  self.system_ ==  "Windows":	#对windows的文件格式进行设置
                self.filePath = (self.filePath + "\\") if self.filePath.rsplit("\\",1)[-1] else self.filePath
            elif self.system_ == "Linux":	#对Linux的文件格式进行设置
                self.filePath = (self.filePath + "/") if self.filePath.rsplit("/",1)[-1] else self.filePath
            self.fileInputPath = self.filePath + inputName	#拼接输入的路径
            self.fileOutPath = self.filePath + outName	#拼接输出的路径
    

    2.设置判断文件是否是图片或视频

    	@property
        def is_picture(self):
            picSuffixSet = {"BMP","GIF","JPEG","TIFF","PNG","SVG","PCX","WMF","EMF","LIC","EPS","TGA","JPG"}	#常用后缀,集合的搜索速度快,所以用集合而不用列表,还能做到去重,避免输入了重复的后缀名
            suffix = self.fileInputPath.rsplit(".",1)[-1].upper()
            if suffix in picSuffixSet:
                return True
            else:
                return False
    
        @property
        def is_video(self):
            videoSuffixSet = {"WMV","ASF","ASX","RM","RMVB","MP4","3GP","MOV","M4V","AVI","DAT","MKV","FIV","VOB"}
            suffix = self.fileInputPath.rsplit(".",1)[-1].upper()
            if suffix in videoSuffixSet:
                return True
            else:
                return False
    

    3.对上传的图片进行压缩

    import zlib	#压缩的库
    import threading	#多线程
    from PIL import Image
    
    
    	def SavePic(self):
            fpsize = os.path.getsize(self.fileInputPath) / 1024  # 获得图片多少K   os.path.getsize(self.picPath)返回的是字节
            if fpsize >= 50.0:  # 是否大于50K
                im = Image.open(self.fileInputPath)  # 打开图片
                imBytes = im.tobytes()  # 把图片转换成bytes流
                imBytes = zlib.compress(imBytes, 5)  # 对图像字节串进行压缩,第二个参数是压缩率有-1,0-9,按个人情况进行设置,我都试过了感觉没多大变化,所以随便设置了5
                im2 = Image.frombytes('RGB', im.size, zlib.decompress(imBytes))  # 压缩成新的图片
                if self.outName:
                    im2.save(self.fileOutPath)  #不覆盖原图
                    return (self.fileOutPath,os.path.getsize(self.fileOutPath))
                else:
                    im2.save(self.fileInputPath)    #覆盖原图
                    return (self.fileInputPath,os.path.getsize(self.fileInputPath))
            else:
                return True
            
    
            def Compress_Picture(self):
            #异步保存打开下面的代码,注释同步保存的代码,我选用的是异步保存,因为如果图片太大用同步的话会阻塞程序的运行,按自己的情况去选择,也可以设置一个变量,然后用判断来看是否启动多线程保存
            thr = threading.Thread(target=self.SavePic)
            thr.start()
            #下面为同步保存
            # fpsize = os.path.getsize(self.fileInputPath) / 1024  # 获得图片多少K   os.path.getsize(self.picPath)返回的是字节
            # if fpsize >= 50.0:  # 是否大于50K
            #     im = Image.open(self.fileInputPath)  # 打开图片
            #     imBytes = im.tobytes()  # 把图片转换成bytes流
            #     imBytes = zlib.compress(imBytes, 5)  # 对图像字节串进行压缩
            #     im2 = Image.frombytes('RGB', im.size, zlib.decompress(imBytes))  # 压缩成新的图片
            #     if self.outName:
            #         im2.save(self.fileOutPath)  # 不覆盖原图
            #         return (self.fileOutPath, os.path.getsize(self.fileOutPath) / 1024)
            #     else:
            #         im2.save(self.fileInputPath)  # 覆盖原图
            #         return (self.fileInputPath, os.path.getsize(self.fileInputPath) / 1024)
            # else:
            #     return True
    

    4.对上传的视频进行压缩

    import os
        def SaveVideo(self):
            fpsize = os.path.getsize(self.fileInputPath) / 1024
            if fpsize >= 150.0: #大于150KB的视频需要压缩
                if self.outName:
                    compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath,self.fileOutPath)
                    isRun = os.system(compress)
                else:
                    compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath, self.fileInputPath)
                    isRun = os.system(compress)
                if isRun != 0:
                    return (isRun,"没有安装ffmpeg")
                return True
            else:
                return True
    
        def Compress_Video(self):
            # 异步保存打开下面的代码,注释同步保存的代码
            thr = threading.Thread(target=self.SaveVideo)
            thr.start()
            #下面为同步代码
            # fpsize = os.path.getsize(self.fileInputPath) / 1024
            # if fpsize >= 150.0:  # 大于150KB的视频需要压缩
            #     compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(
            #         self.fileInputPath, self.fileOutPath)
            #     isRun = os.system(compress)
            #     if isRun != 0:
            #         return (isRun, "没有安装ffmpeg")
            #     return True
            # else:
            #     return True
    

    我这里使用了是ffmpeg对视频进行压缩,这个是一个非常好用的工具,Linux和windows都有,在Linux中可以使用apt install ffmpeg进行安装(我用的是Ubuntu的系统,所以使用apt进行安装,如果用的是Centos的用对应的yum进行安装就行了)

    ffmpeg命令解释

    ffmpeg -i 1.mp4 -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 147fss.mp4
    
    • -i 输入的视频文件
    • -r 每一秒的帧数,一秒10帧大概就是人眼的速度
    • -pix_fmt 设置视频颜色空间 yuv420p网络传输用的颜色空间 ffmpeg -pix_fmts可以查看有哪些颜色空间选择
    • -vcodec 软件编码器,libx264通用稳定
    • -preset 编码机预设 编码机预设越高占用CPU越大 有十个参数可选 ultrafast superfast veryfast(录制视频选用) faster fast medium(默认) slow slower veryslow(压制视频时一般选用) pacebo
    • -profile:v 压缩比的配置 越往左边压缩的越厉害,体积越小 baseline(实时通信领域一般选用,画面损失越大) Extended Main(流媒体选用) High(超清视频) High 10 High 4:2:2 High 4:4:4(Predictive)
    • -level:v 对编码机的规范和限制针对不通的使用场景来操作,也就是不同分辨率设置不同的值(这个我没有设置,因为这个要根据不同的分辨率进行设置的,具体要去官方文档查看)
    • -crf 码率控制模式 用于对画面有要求,对文件大小无关紧要的场景 0-51都可以选择 0为无损 一般设置18 - 28之间 大于28画面损失严重
    • -acodec 设置音频编码器

    完整代码

    import sys
    import os
    import zlib
    import threading
    import platform
    from PIL import Image
    
    class Compress_Pic_or_Video(object):
        def __init__(self,filePath,inputName,outName=""):
            self.filePath = filePath  #文件地址
            self.inputName = inputName  #输入的文件名字
            self.outName = outName  #输出的文件名字
            self.system_ = platform.platform().split("-",1)[0]
            if  self.system_ ==  "Windows":
                self.filePath = (self.filePath + "\\") if self.filePath.rsplit("\\",1)[-1] else self.filePath
            elif self.system_ == "Linux":
                self.filePath = (self.filePath + "/") if self.filePath.rsplit("/",1)[-1] else self.filePath
            self.fileInputPath = self.filePath + inputName
            self.fileOutPath = self.filePath + outName
    
        @property
        def is_picture(self):
            picSuffixSet = {"BMP","GIF","JPEG","TIFF","PNG","SVG","PCX","WMF","EMF","LIC","EPS","TGA","JPG"}
            suffix = self.fileInputPath.rsplit(".",1)[-1].upper()
            if suffix in picSuffixSet:
                return True
            else:
                return False
    
        @property
        def is_video(self):
            videoSuffixSet = {"WMV","ASF","ASX","RM","RMVB","MP4","3GP","MOV","M4V","AVI","DAT","MKV","FIV","VOB"}
            suffix = self.fileInputPath.rsplit(".",1)[-1].upper()
            if suffix in videoSuffixSet:
                return True
            else:
                return False
    
    
        def SavePic(self):
            fpsize = os.path.getsize(self.fileInputPath) / 1024  # 获得图片多少K   os.path.getsize(self.picPath)返回的是字节
            if fpsize >= 50.0:  # 是否大于50K
                im = Image.open(self.fileInputPath)  # 打开图片
                imBytes = im.tobytes()  # 把图片转换成bytes流
                imBytes = zlib.compress(imBytes, 5)  # 对图像字节串进行压缩
                im2 = Image.frombytes('RGB', im.size, zlib.decompress(imBytes))  # 压缩成新的图片
                if self.outName:
                    im2.save(self.fileOutPath)  #不覆盖原图
                    return (self.fileOutPath,os.path.getsize(self.fileOutPath))
                else:
                    im2.save(self.fileInputPath)    #覆盖原图
                    return (self.fileInputPath,os.path.getsize(self.fileInputPath))
            else:
                return True
    
        def SaveVideo(self):
            fpsize = os.path.getsize(self.fileInputPath) / 1024
            if fpsize >= 150.0: #大于150KB的视频需要压缩
                if self.outName:
                    compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath,self.fileOutPath)
                    isRun = os.system(compress)
                else:
                    compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath, self.fileInputPath)
                    isRun = os.system(compress)
                if isRun != 0:
                    return (isRun,"没有安装ffmpeg")
                return True
            else:
                return True
    
        def Compress_Picture(self):
            #异步保存打开下面的代码,注释同步保存的代码
            thr = threading.Thread(target=self.SavePic)
            thr.start()
            #下面为同步保存
            # fpsize = os.path.getsize(self.fileInputPath) / 1024  # 获得图片多少K   os.path.getsize(self.picPath)返回的是字节
            # if fpsize >= 50.0:  # 是否大于50K
            #     im = Image.open(self.fileInputPath)  # 打开图片
            #     imBytes = im.tobytes()  # 把图片转换成bytes流
            #     imBytes = zlib.compress(imBytes, 5)  # 对图像字节串进行压缩
            #     im2 = Image.frombytes('RGB', im.size, zlib.decompress(imBytes))  # 压缩成新的图片
            #     if self.outName:
            #         im2.save(self.fileOutPath)  # 不覆盖原图
            #         return (self.fileOutPath, os.path.getsize(self.fileOutPath) / 1024)
            #     else:
            #         im2.save(self.fileInputPath)  # 覆盖原图
            #         return (self.fileInputPath, os.path.getsize(self.fileInputPath) / 1024)
            # else:
            #     return True
    
        def Compress_Video(self):
            # 异步保存打开下面的代码,注释同步保存的代码
            thr = threading.Thread(target=self.SaveVideo)
            thr.start()
            #下面为同步代码
            # fpsize = os.path.getsize(self.fileInputPath) / 1024
            # if fpsize >= 150.0:  # 大于150KB的视频需要压缩
            #     compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(
            #         self.fileInputPath, self.fileOutPath)
            #     isRun = os.system(compress)
            #     if isRun != 0:
            #         return (isRun, "没有安装ffmpeg")
            #     return True
            # else:
            #     return True
    
    if __name__ == "__main__":
        b = sys.argv[1:]	#测试压缩
        savepic = Compress_Pic_or_Video(b[0],b[1],b[2])
        print(savepic.Compress_Picture())
    

    测试情况

    对图片进行压缩

    在这里插入图片描述

    在这里插入图片描述

    左边为没压缩过的原图,右边是压缩过后的原图,两张图片像素都是一样的,两张图片用肉眼几乎分辨不出差别

    对视频进行压缩

    在这里插入图片描述

    在这里插入图片描述

    左边为未压缩过的原视频文件,右边为压缩过的视频文件,可见帧宽度与帧高度都没发生过改变,只是修改了数据速率,总比特率等的这些信息,源文件帧速率为每秒12帧,现在压缩成了每秒10帧,人眼是没办法分别出12帧与10帧的区别的,我测试过原视频和压缩后的视频观看上是没有却别的,声轨也听不出。

    参考的文章

    https://blog.csdn.net/oh5W6HinUg43JvRhhB/article/details/80850839

    http://ffmpeg.org/documentation.html

    展开全文
  • 教你用Python压缩图片

    万次阅读 多人点赞 2018-11-17 21:29:30
    如果需要做图片识别那么必定需要大量的训练素材,我们通常使用爬虫来获取,python爬取bing图片python爬取百度图片,但是怕取下来的图片大小不一,再进行训练之前必须进行裁剪和压缩,今天就来讲一讲图片压缩,下面...
  • python 压缩图片

    千次阅读 2019-03-06 22:46:04
    pil读取图片特别快,0ms,保存文件需要26ms def b(): path = 'd:/1.jpg' for i in range(10): start = time.time() roiImg=Image.open(path) encode_t = time.time() - start start = time.time() ...
  • 主要介绍了Python无损压缩图片的方法,简单的代码即可实现压缩图片,感兴趣的朋友可以了解下
  • python 压缩图片 到指定像素

    千次阅读 2018-07-02 17:40:49
    # coding=utf-8import globimport osfrom PIL import Image# print(glob.glob(r'D:\VideoPhotos\sign\*.jpg'))path = r'D:\VideoPhotos\sign'images = glob.glob(path + r"\*.jpg")for img in images: # ...
  • Python实现图片压缩.py

    2020-08-07 16:34:26
    项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩。 具体说明见下述链接: https://blog.csdn.net/weixin_43964993/article/details/107865140
  • 由于云盘空间有限,照片尺寸也是很大,所以写个Python程序压缩一下照片,腾出一些云盘空间 1、批量压缩照片 新建 photo_compress.py 代码如下 # -*- coding: utf-8 -*- """脚本功能说明:使用 tinypng api,一键...
  • 图片大小压缩是偶尔需要用上的工具,对于不懂的人来说很有可能需要付费才能达到想要的图片大小,今天就用python来写个简单的工具来实现图片压缩吧 import os from PIL import Image def get_size(file): # 获取...
  • python写的一个图片批量处理工具,对于有大量图片需要修改像素大小和图片占用空间压缩,还是比较实用的。 功能介绍: 1、将本工具放入图片同一级目录,直接运行就可以自动的批量处理了,同时会自动的覆盖原有...
  • 主要为大家详细介绍了Python实现批量压缩图片的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python 实现图片像素大小设置,可以实现图像的任意大小输出。
  • Python实现图片压缩

    千次阅读 2020-08-07 16:32:36
      项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩。 目录一:导入包二:获取图片文件的大小三:拼接输出文件地址四:压缩文件到指定大小,我期望的是150KB,step和quality可以...
  • 说到png图片压缩,可能很多人知道TinyPNG这个网站。但PS插件要钱(虽然有破解的),Developer API要连到他服务器去,不提网络传输速度,Key也是有每月限制的。    但是貌似tinyPNG是使用了来自于 pngquant 的技术...
  • from PIL import Image import os def compress_image(infile, outfile=’’, mb=150, step=10, quality=80): “”“不改变图片尺寸压缩到指定大小 :param infile: 压缩源文件 :param outfile: 压缩文件保存地址 :...
  • 图像文件压缩。使用PIL库对图像进行等比例压缩,无论压缩前文件大小如何,压缩后文件大小小于10KB。...picture=input("请输入图片的名称以及格式:") image=Image.open(picture) size=os.path.getsize(pictur
  • PDF压缩工具,目前只针对纯PDF图片文件,可批量压缩文件,压缩后的文件默认生成在D:/smallPDF
  • python -- 图片压缩处理

    千次阅读 2019-05-09 09:54:36
    #指定要压缩的文件夹 srcPath = './img' #压缩后文件夹 dstPath = './ComperssImg' for filename in os.listdir(srcPath): #如果不存在目的目录则创建一个,保持层级结构 if not os.path.exists(dstPath)...
  • python Image库 压缩图片至指定大小

    千次阅读 2020-05-11 19:42:31
    from PIL import Image import os path="test.jpg" im=Image.open(path)#返回一个Image对象 #os模块中的path目录下的getSize()方法获取文件大小,单位字节...#用于保存压缩过程中的temp路径,每次压缩会被不断覆盖 ne.
  • python压缩图片、视频 图片压缩使用zlib库 视频压缩使用工具ffmpeg # ffmpeg -i 1.mp4 -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline -crf 23 -acodec aac -b:a 32k -strict -5 ...
  • python Png图片压缩工具

    千次阅读 2018-10-13 16:53:45
    引言 最近在做 H5 小游戏的开发,与 App 不同,由于 H5 所有的资源都是通过 CDN 获取的,考虑到网络资源加载速度的...但考虑压缩资源还需要启动一个应用,将图片资源拖进去再开始压缩,显然不够智能,希望通过 p...
  • 本文实例为大家分享了python实现图片批量压缩程序的具体代码,供大家参考,具体内容如下 说明 运行环境:Win10 Pycharm 程序没有用到面向对象编程方法,只是简单的面向过程设计 用到的模块:PIL、os、sys 使用...
  • OpenCV—python 图像压缩

    千次阅读 2019-09-12 08:58:50
    文章目录一、简单的图像压缩二、待续 一、简单的图像压缩 import cv2 ''' ====图像压缩===== CV_INTER_NN - 最近邻插值, CV_INTER_LINEAR - 双线性插值 (缺省使用) CV_INTER_AREA - 使用像素关系重采样。当...
  • 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
  • Python快速压缩文件夹中所有图片

    千次阅读 2018-10-14 21:51:02
    使用PIL压缩图片 简单的例子 from PIL import Image path = "根据自己的情况填写" foo = Image.open(path) foo = foo.resize((160,300),Image.ANTIALIAS) # resize()的两个参数分别限定宽度和长度 foo....
  • 代码中为了切换图片的读取格式将图片保存后又读取了一遍,太过繁琐,需要改进的代码请前往 https://blog.csdn.net/lidongxx/article/details/92769009 from PIL import Image from PIL import ImageFilter ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,179
精华内容 16,471
关键字:

python压缩图片

python 订阅