python - 如何垂直合并两个图像?
问题描述
如何使用 Python 和 PIL 库垂直合并两个图像?我试过这样做:
images_list = ['pil_text.png','pic.jpeg']
imgs = [ Image.open(i) for i in images_list ]
min_img_shape = sorted( [(np.sum(i.size), i.size ) for i in imgs])[0][1]
img_merge = np.vstack( (np.asarray( i.resize(min_img_shape,Image.ANTIALIAS) ) for i in imgs ) )
img_merge = Image.fromarray( img_merge)
img_merge.save( 'terracegarden_v.jpg' )
但是我在底部的图像被压扁了。
解决方案
请注意,除非您出于某种原因想要使用更大的脚本,否则您不需要在此过程中涉及 numpy。
from PIL import Image
images_list = ['pil_text.png', 'pic.jpeg']
imgs = [Image.open(i) for i in images_list]
# If you're using an older version of Pillow, you might have to use .size[0] instead of .width
# and later on, .size[1] instead of .height
min_img_width = min(i.width for i in imgs)
total_height = 0
for i, img in enumerate(imgs):
# If the image is larger than the minimum width, resize it
if img.width > min_img_width:
imgs[i] = img.resize((min_img_width, int(img.height / img.width * min_img_width)), Image.ANTIALIAS)
total_height += imgs[i].height
# I have picked the mode of the first image to be generic. You may have other ideas
# Now that we know the total height of all of the resized images, we know the height of our final image
img_merge = Image.new(imgs[0].mode, (min_img_width, total_height))
y = 0
for img in imgs:
img_merge.paste(img, (0, y))
y += img.height
img_merge.save('terracegarden_v.jpg')
推荐阅读
- python - 打开现有工作簿的问题
- swift - NEVPNManager - 如何快速跟踪 VPN 的数据使用情况
- flutter - 单击时在 FlatButton 周围绘制边框
- wpf - 在 WPF 中覆盖或添加一些样式属性
- android - android中的SQL数据库中没有列
- javascript - 如何从前端使用 php/asp.net 等服务器端脚本访问浏览器 localStorage?
- python - 在同一索引的嵌套列表中查找最小的数字
- python-3.x - 为什么没有出现 flash 消息
- c++-cli - 转换数组的正确方法
^ 到 std::string - java - 从服务中读取@Value - springboot SpEL