概述
功能说明
def image_combines(img_dir,fw=1,fh=1,cols=1,flag_sort=True,IMAGES_FORMAT = ['.jpg', '.JPG', 'PNG', '.png', '.jpeg']):
'''
img_dir 表示需要遍历文件夹
fw,fh 分别表示图像宽、高统一放缩的比例,1表示1倍
cols 表示拼接后的图片的每行多少张小图片(多少列),
cols=0时,自动按照平方根拼接
flag_sort=True 路径按字符串顺序排列,防止每次图片位置不一样
'''
代码
def image_combines(img_dir,fw=1,fh=1,cols=0,flag_sort=True,IMAGES_FORMAT = ['.jpg', '.JPG', 'PNG', '.png', '.jpeg']):
IMAGES_PATH=img_dir
img_paths=[]
for cur_dir,folders,files in os.walk(IMAGES_PATH):
for name in files:
if name.endswith(tuple(IMAGES_FORMAT)):
path=os.path.join(cur_dir,name)
img_paths.append(path)
# image_names = [name for name in (os.listdir(IMAGES_PATH)) for item in IMAGES_FORMAT if
# os.path.splitext(name)[1] == item]
if flag_sort:
img_paths.sort()
print('img_paths',img_paths)
n_imgs=len(img_paths)
# 向上取整 方图
squrt=math.ceil(math.sqrt(n_imgs))
print("n_imgs",n_imgs)
print("squrt",squrt)
# 如果不指定图片的列数,就需要
if cols!=0:
IMAGE_COLUMN=cols
else:
IMAGE_COLUMN =squrt # 图片间隔,也就是合并成一张图后,一共有几列
IMAGE_ROW = n_imgs//IMAGE_COLUMN # 图片间隔,也就是合并成一张图后,一共有几行
if n_imgs%IMAGE_COLUMN!=0:
IMAGE_ROW+=1
print("IMAGE_ROW,IMAGE_c",IMAGE_ROW,IMAGE_COLUMN)
# https://blog.csdn.net/weixin_44548693/article/details/104125989
src_w,src_h=Image.open(img_paths[0]).size
IMAGE_X_SIZE=int(src_w*fw)
IMAGE_Y_SIZE=int(src_h*fh)
print("IMAGE_X_SIZE,IMAGE_c",IMAGE_X_SIZE,IMAGE_X_SIZE)
to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_X_SIZE, IMAGE_ROW * IMAGE_Y_SIZE)) # 创建一个新图
# 循环遍历,把每张图片按顺序粘贴到对应位置上
i=0
for y in range(1, IMAGE_ROW + 1):
for x in range(1, IMAGE_COLUMN + 1):
if i>=n_imgs:
break
img_path=img_paths[i]
from_image = Image.open(img_path).resize((IMAGE_X_SIZE, IMAGE_Y_SIZE), Image.ANTIALIAS)
# from_image = Image.open(os.path.join(IMAGES_PATH , image_names[IMAGE_COLUMN * (y - 1) + x - 1])).resize((IMAGE_X_SIZE, IMAGE_Y_SIZE), Image.ANTIALIAS)
to_image.paste(from_image, ((x - 1) * IMAGE_X_SIZE, (y - 1) * IMAGE_Y_SIZE))
i+=1
return to_image
if __name__ == '__main__':
test=r'your_imge_dir'
to_image=image_combines(test,fw=0.5,fh=0.5,cols=5)
to_image.save('./test.png')
# 没有指定列cols,将自动计算列参数
to_image=image_combines(test,fw=0.5,fh=0.5)
to_image.save('./test_squra.png')
自动计算列宽拼接结果
最后
以上就是感动小熊猫为你收集整理的【python拼图】遍历文件夹后,自动拼接图像成正方形图,或者指定行数显示的全部内容,希望文章能够帮你解决【python拼图】遍历文件夹后,自动拼接图像成正方形图,或者指定行数显示所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复