python批量压缩图像的完整步骤是什么(python,开发技术)

时间:2024-05-03 03:51:49 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    背景

    今天在工作中,同事遇到一个上传图片的问题:系统要求的图片大小不能超过512KB。但是同事又有很多照片。这要是每一个照片都用ps压缩的话,那岂不是很崩溃。于是我写了一个脚本,可以批量压缩图片到指定大小。直接造福同事、提高同事的工作效率。

    解决方案

    其实也不用卖关子了,就是使用python的pillow包就可以对图片进行压缩,如果一个图片已经压缩到指定大小了,那就停止压缩,如果没有达到指定大小,那就对压缩后的图片再进行压缩,直到压缩到自定范围内。

    可是为什么不在网上找代码呢?我也是找过,但是发现很多代码质量参差不齐,都达不到我想要的效果,而且很不优雅。于是我随手就写了一个代码,不仅仅代码写的简单,而且逻辑清楚,最后为了效率,我还做了一个并行,同时使用10个进程处理。说实话,那可是真的飞快。

    操作步骤

    要求

    • 默认是使用的是Anaconda的环境。

    • 将所有要压缩的图片都放在一个文件夹下,然后每个图片的格式只能是下面三种:png,jpg, jpeg。如果是PNG也不行。因为PNG是png的大写。

    • 代码中设置的图像的压缩后的大小是512KB,那么你可以设置代码中的target_size为500,只要比512KB小就行了。

    • 然后把我的代码从GitHub上下载下来。代码链接为:https://github.com/yuanzhoulvpi2017/tiny_python/blob/main/image_compression/ic.py

    步骤

    我这里把所有图片都放在了一个文件夹里面,文件夹名称为历史截图。然后我的这个历史截图和ic.py代码都放在了little_code文件夹中。

    python批量压缩图像的完整步骤是什么

    在little_code文件夹下,打开终端。

    python批量压缩图像的完整步骤是什么

    直接运行的脚本:

    pythonic.pyxxx_文件夹

    等待一会,就会将整个文件夹下的所有图片都转化好了。

    python批量压缩图像的完整步骤是什么

    完整代码:

    如果上不去GitHub的话,我直接把代码放在这里,保存为一个python文件即可。比如保存的文件名为:ic.py

    fromPILimportImagefromglobimportglobimportosfromtqdmimporttqdmimportshutilimportsysfromitertoolsimportchainfrommultiprocessingimportPool#image_dir="image_dir"template_dir='template'output_dir='output'error_dir='error'defclean_dir(dir_name):ifos.path.exists(dir_name):shutil.rmtree(dir_name)os.makedirs(dir_name)else:os.makedirs(dir_name)#image_file_list=glob(f"{image_dir}/*")#image_file_listdefimagesize(filepath):"""获得文件的磁盘大小:paramfilepath::return:"""returnos.path.getsize(filepath)/1024defcompress_image(image_path):raw_image=Image.open(image_path)temp_image_name=image_path.split(os.sep)[-1]template_image=os.path.join(template_dir,temp_image_name)output_image=os.path.join(output_dir,temp_image_name)error_image=os.path.join(error_dir,temp_image_name)target_size=500#kbtry:ifimagesize(image_path)<target_size:shutil.copyfile(image_path,output_image)else:width,height=raw_image.sizeraw_image.resize((int(width*0.9),int(height*0.9)),Image.ANTIALIAS).save(template_image)whileimagesize(template_image)>target_size:template_iamge2=Image.open(template_image)width_2,height_2=template_iamge2.sizetemplate_iamge2.resize((int(width_2*0.9),int(height_2*0.9)),Image.ANTIALIAS).save(template_image)shutil.copyfile(template_image,output_image)exceptExceptionase:shutil.copyfile(image_path,error_image)print(f'文件保存失败:{image_path}')#print(e)if__name__=='__main__':#批量创建文件夹[clean_dir(i)foriin[template_dir,output_dir,error_dir]]image_dir=sys.argv[1]image_file_list=list(chain(*[glob(os.path.join(image_dir,i))foriin['*.png','*.jpg','*.jpeg']]))#fortemp_image_pathintqdm(image_file_list):#compress_image(temp_image_path)print(f'\n\n文件保存父目录:{os.getcwd()}\n'f'输出文件位置:{os.path.join(os.getcwd(),output_dir)}\n\n')#parallelP=Pool(processes=10)pbar=tqdm(total=len(image_file_list))res_temp=[P.apply_async(func=compress_image,args=(i,),callback=lambda_:pbar.update(1))foriinimage_file_list]_=[res.get()forresinres_temp]

    附:批量将图片的大小设置为指定大小

    importosfromPILimportImage#源目录project_dir=os.path.dirname(os.path.abspath(__file__))input=os.path.join(project_dir,'src')#输出目录output=os.path.join(project_dir,'dest')defmodify():#切换目录os.chdir(input)#遍历目录下所有的文件forimage_nameinos.listdir(os.getcwd()):print(image_name)im=Image.open(os.path.join(input,image_name))im.thumbnail((128,128))im.save(os.path.join(output,image_name))if__name__=='__main__':modify()
     </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
    本文:python批量压缩图像的完整步骤是什么的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:PXE怎么实现自动化部署Linux系统下一篇:

    11 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18