Python如何用线程生成缩略图,详细过程是什么
Admin 2022-08-24 群英技术资讯 946 次浏览
这篇文章主要讲解了“Python如何用线程生成缩略图,详细过程是什么”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。利用线程生成缩略图;
读取当前路径下的png文件,在当前路径下生成6464,128128和32*32的缩略图。
"""
利用线程生成缩略图
读取当前路径下的png文件,在当前路径下生成64*64,128*128和32*32的缩略图
"""
import glob
import os
import threading
from PIL import Image
def generate_thumbnail(infile, size):
"""生成指定图片文件的缩略图"""
file, ext = os.path.splitext(infile)
file = file[file.rfind('/') + 1:] # 查找文件名
outfile = f'{file}_{size[0]}_{size[1]}{ext}' # 生成缩略图的文件名
img = Image.open(infile)
img.thumbnail(size, Image.ANTIALIAS) # 进行缩略图 size为元组 Image.ANTIALIAS表示低质量
img.save(outfile)
def main():
"""主函数"""
for infile in glob.glob('*.png'): # 查找当前路径下的png文件
for size in (32, 64, 128): # 利用线程生成多个尺寸的缩略图
# 创建并启动线程
threading.Thread(
target=generate_thumbnail,
args=(infile, (size, size))
).start()
if __name__ == '__main__':
main()
补充:python 缩放并裁剪图片 制作图片缩略图
现在有一文件夹中存在许多分辨率不同的图片或文件夹,需要裁剪至指定大小以便作为网页中的图片缩略图。
cut 函数,将图片裁剪为指定大小,统一分辨率,缩放后取图片中间部分,超出的部分直接裁剪掉。
还有一个函数 cut2,为等比缩放至x或y为定值。
缩放裁剪后的x、y像素值在代码开始部分更改即可。
默认只使用 cut 函数,使用 cut2 函数时需在代码第18-20行更改。
1.缩放裁剪后会覆盖原文件,需要的话,请在缩放裁剪前备份图片。
2.没有做文件夹验证,请确认输入正确的文件夹路径,并确保文件夹中只有图片。
3.多次缩放可能会使图片变得模糊,尤其是文字边缘。
完整代码
import cv2
import os
import numpy as np
# cut 裁剪后的 xy
target_x = 286
target_y = 203
def get_dir(dir):
""" 遍历文件夹下所有的文件名 """
list1 = os.listdir(dir)
for l in list1:
l = f'{dir}/{l}'
if(os.path.isdir(l)):
get_dir(l)
else:
cut(l)
# cut2(l,x=800)
# cut2(l,y=400)
def cut(inputdir = './t.jpg'):
""" 图片裁剪 """
# 裁剪后的文件名为
# outputdir = inputdir[:-4] + '_over.jpg'
# 设置为相同文件名,覆盖原文件
outputdir = inputdir
# img = cv2.imread(inputdir) # imread读取不能包含中文文件名
img = cv2.imdecode(np.fromfile(inputdir, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
# imdecode读取图像默BGR通道排列,
# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 转换为RGB
# img.shape:[height,width,channel]
in_y, in_x = img.shape[:2]
print(img.shape)
scale = target_x / target_y
scale1 = in_x / in_y
if(scale1 >= scale):
size = (int(in_x/(in_y/target_y)), target_y)
# print(1, size)
elif(scale1 < scale):
size = (target_x, int(in_y/(in_x/target_x)))
# print(2, size)
else:
size = (target_x, target_y)
print('error')
# 缩放到size=(x,y)
resized = cv2.resize(img, size, interpolation=cv2.INTER_AREA)
# 展示裁剪后的图片
# cv2.imshow('image', resized)
# cv2.waitKey(0)
# print('x', resized.shape[1], 'y', resized.shape[0])
if(resized.shape[1] == target_x):
# x=target_x
y0 = resized.shape[0] // 2 - target_y//2
y1 = y0 + target_y
x0 = 0
x1 = target_x
if(resized.shape[0] == target_y):
# y=target_y
y0 = 0
y1 = target_y
x0 = resized.shape[1] // 2 - target_x//2
x1 = x0 + target_x
output_img = resized[y0:y1, x0:x1]
# cv2.imwrite(outputdir, output_img) # imwrite保存文件名不能包含中文
cv2.imencode('.jpg', output_img)[1].tofile(outputdir)
def cut2(inputdir = './t.jpg', x=0, y=0):
""" 等比缩放,不裁剪 """
# outputdir = inputdir[:-4] + '_over.jpg'
outputdir = inputdir
img = cv2.imdecode(np.fromfile(inputdir, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
in_y, in_x = img.shape[:2]
if(x):
# 等比缩小为x=
fxy = x/in_x
elif(y):
# 等比缩小为y=
fxy = y/in_y
else:
fxy = 1
# 按比例缩放,fx:x轴缩放比例,fy:y轴缩放比例
output_img = cv2.resize(img, (0,0), fx=fxy, fy=fxy, interpolation=cv2.INTER_AREA)
cv2.imencode('.jpg', output_img)[1].tofile(outputdir)
if __name__ == "__main__":
original_dir = input('文件夹路径:')
get_dir(original_dir)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
python opencv实现目标区域裁剪功能?这个任务是自己在项目中数据处理的一部分内容,待处理的图片如下所示:我需要将目标区域给裁剪出来,要不然在后期训练网络的时候整幅图像过大,且目标区域过小,得到结果不好,还会加剧计算量。
这篇文章主要为大家介绍了python的tkinter实现简单登录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于pytorch模型保存与加载中的一些问题实战记录,下面一起来看一下,希望对大家有帮助。
这篇文章主要为大家介绍了python 的while循环嵌套,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
样用python实现自动生成word试卷功能?现在我们有很多网上考试,有些需求需要我们在写完文章后,自动生成目录。很多朋友就比较好奇要如何实现自动生成word试卷,对此,这篇文章就给大家分享用python实现生成word试卷的内容,感兴趣的朋友就继续往下看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008