版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yql_617540298/article/details/82050190
说在前面
需求:一个文件夹内有若干图片,可以被10整除,希望每10张图片横向拼接成一张大图。
源码
import os
from PIL import Image
UNIT_SIZE = 96 # 单个图像的大小长度为96
TARGET_WIDTH = 10 * UNIT_SIZE # 拼接完后的横向长度为10*96
path = "C:/Users/Administrator/Desktop/bbbb"
save_path = 'C:/Users/Administrator/Desktop/bbbbb/'
images = [] # 存储图像的名称的列表
for root, dirs, files in os.walk(path):
for f in files :
images.append(f)
print('images=',images)
for i in range(len(images)/10): # 10个图像为一组
imagefile = []
j = 0
for j in range(10):
imagefile.append(Image.open(path+'/'+images[i*10+j]))
target = Image.new('L', (TARGET_WIDTH, UNIT_SIZE))
left = 0
right = UNIT_SIZE
for image in imagefile:
target.paste(image, (left, 0, right, UNIT_SIZE))# 将image复制到target的指定位置中
left += UNIT_SIZE # left是左上角的横坐标,依次递增
right += UNIT_SIZE # right是右下的横坐标,依次递增
quality_value = 1000 # quality来指定生成图片的质量
target.save(save_path+os.path.splitext(images[i*10+j])[0]+'.jpg', quality = quality_value)
imagefile = []
补充
这时可以实现将图片横向拼接,但可能出现的问题是:发现不是按顺序横向连接的。
当我们打印了列表images[]信息发现,名称存储顺序是:1.jpg、10.jpg……,所以我们需要使用python代码将文件夹下的所有图片重命名为00001.jpg这样可以解决这个问题。
源码
from PIL import Image
for i in range(1,3755):
img = Image.open("C:/Users/Administrator/Desktop/bbbbb/"+str(i)+".jpg")
img = img.convert("L")
img = img.resize((96,96))
img.save("C:/Users/Administrator/Desktop/testresults/"+str(i).zfill(5)+".png", "PNG")
说在后面
如果在执行程序时,发现出现了问题:
原因:在python2,/
只留下了整数部分,去掉了小数,是int型。而在python3里,/
的结果是真正意义上的除法,结果是float型。所以便出现了Error Message: ‘float’ object cannot be interpreted as an integer。
具体可以查看链接:https://blog.csdn.net/amoscn/article/details/78321137
在可以建立python2.7的虚拟环境,可以解决。