瞎扯几句
哎,开头总喜欢瞎扯几句,今天本来,啥都挺好,前两天整了个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)https://github.com/xiaobailong-ui/deepling/tree/pic_compress_png/pic_compress_png
再瞎扯几句:
? ? ? ? 初次学习,有错误之处,也可以帮忙改正一下,谢谢
|