鱼C论坛

 找回密码
 立即注册
查看: 485|回复: 3

[已解决]如何将一个目录下多组图片,两两合并一张

[复制链接]
发表于 2024-7-31 17:22:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就是这样一组2张不同时间 微信图片_20240731171656.png 的图片,如何用python实现合并成一张
最佳答案
2024-7-31 17:25:38
要将一个目录下的多组图片两两合并成一张,您可以使用Python中的PIL(Python Imaging Library)库来实现。下面是一个简单而有趣的示例代码。我们会将这些图片“黏在一起”,就像把两片面包夹住中间的生菜和培根一样!

首先,确保您安装了`Pillow`库。如果还没有安装,可以通过以下命令安装:

  1. pip install Pillow
复制代码


接下来,让我们来看一下具体代码:

  1. import os
  2. from PIL import Image

  3. # 定义一个函数来合并图片
  4. def merge_images(image1_path, image2_path, output_path):
  5.     # 打开两张图片
  6.     img1 = Image.open(image1_path)
  7.     img2 = Image.open(image2_path)

  8.     # 获取新图片的尺寸,这里假设我们将图片并排放置
  9.     total_width = img1.width + img2.width
  10.     max_height = max(img1.height, img2.height)

  11.     # 创建一个新的空白图片
  12.     new_image = Image.new('RGB', (total_width, max_height))
  13.    
  14.     # 将两张图片粘贴到新图片上
  15.     new_image.paste(img1, (0, 0))
  16.     new_image.paste(img2, (img1.width, 0))

  17.     # 保存合并后的图片
  18.     new_image.save(output_path)
  19.     print(f'合并成功:{output_path}')

  20. # 指定图片所在的目录
  21. image_dir = 'path/to/your/images'
  22. output_dir = 'path/to/save/merged/images'

  23. # 确保输出目录存在
  24. os.makedirs(output_dir, exist_ok=True)

  25. # 获取目录下所有图片文件
  26. images = [f for f in os.listdir(image_dir) if f.endswith(('.png', '.jpg', '.jpeg'))]

  27. # 两两合并图片
  28. for i in range(0, len(images), 2):
  29.     if i + 1 < len(images):  # 确保有成对的图片
  30.         image1_path = os.path.join(image_dir, images[i])
  31.         image2_path = os.path.join(image_dir, images[i+1])
  32.         output_path = os.path.join(output_dir, f'merged_{i//2}.jpg')
  33.         
  34.         merge_images(image1_path, image2_path, output_path)

  35. print("处理完成!")
复制代码


### 代码解释:

1. **导入库**:导入必要的模块,Pillow用于处理图片,os用于文件操作。
2. **合并函数**:`merge_images`函数用于打开两张图片、计算新图片的宽度和高度、创建新图片并粘贴两张原图,然后保存新图片。
3. **获取图片列表**:从指定目录获取所有jpg和png文件。
4. **两两合并**:通过循环以每两个文件为一组调用合并函数。
5. **输出结果**:每次合并后会在输出目录生成一张新图片。

### 小提示:
- 确保你的图片数量是偶数,如果是奇数,最后一张图片可能会孤独地呆在那里。
- 修改合并方式(例如上下合并),只需调整`paste`方法中的坐标。

快去试试吧!祝您合并愉快,就像做三明治一样简单!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-7-31 17:25:38 | 显示全部楼层    本楼为最佳答案   
要将一个目录下的多组图片两两合并成一张,您可以使用Python中的PIL(Python Imaging Library)库来实现。下面是一个简单而有趣的示例代码。我们会将这些图片“黏在一起”,就像把两片面包夹住中间的生菜和培根一样!

首先,确保您安装了`Pillow`库。如果还没有安装,可以通过以下命令安装:

  1. pip install Pillow
复制代码


接下来,让我们来看一下具体代码:

  1. import os
  2. from PIL import Image

  3. # 定义一个函数来合并图片
  4. def merge_images(image1_path, image2_path, output_path):
  5.     # 打开两张图片
  6.     img1 = Image.open(image1_path)
  7.     img2 = Image.open(image2_path)

  8.     # 获取新图片的尺寸,这里假设我们将图片并排放置
  9.     total_width = img1.width + img2.width
  10.     max_height = max(img1.height, img2.height)

  11.     # 创建一个新的空白图片
  12.     new_image = Image.new('RGB', (total_width, max_height))
  13.    
  14.     # 将两张图片粘贴到新图片上
  15.     new_image.paste(img1, (0, 0))
  16.     new_image.paste(img2, (img1.width, 0))

  17.     # 保存合并后的图片
  18.     new_image.save(output_path)
  19.     print(f'合并成功:{output_path}')

  20. # 指定图片所在的目录
  21. image_dir = 'path/to/your/images'
  22. output_dir = 'path/to/save/merged/images'

  23. # 确保输出目录存在
  24. os.makedirs(output_dir, exist_ok=True)

  25. # 获取目录下所有图片文件
  26. images = [f for f in os.listdir(image_dir) if f.endswith(('.png', '.jpg', '.jpeg'))]

  27. # 两两合并图片
  28. for i in range(0, len(images), 2):
  29.     if i + 1 < len(images):  # 确保有成对的图片
  30.         image1_path = os.path.join(image_dir, images[i])
  31.         image2_path = os.path.join(image_dir, images[i+1])
  32.         output_path = os.path.join(output_dir, f'merged_{i//2}.jpg')
  33.         
  34.         merge_images(image1_path, image2_path, output_path)

  35. print("处理完成!")
复制代码


### 代码解释:

1. **导入库**:导入必要的模块,Pillow用于处理图片,os用于文件操作。
2. **合并函数**:`merge_images`函数用于打开两张图片、计算新图片的宽度和高度、创建新图片并粘贴两张原图,然后保存新图片。
3. **获取图片列表**:从指定目录获取所有jpg和png文件。
4. **两两合并**:通过循环以每两个文件为一组调用合并函数。
5. **输出结果**:每次合并后会在输出目录生成一张新图片。

### 小提示:
- 确保你的图片数量是偶数,如果是奇数,最后一张图片可能会孤独地呆在那里。
- 修改合并方式(例如上下合并),只需调整`paste`方法中的坐标。

快去试试吧!祝您合并愉快,就像做三明治一样简单!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-31 19:48:52 | 显示全部楼层
        "合并"两个文件是指把符合条件的两个文件的字节内容合并后写入其中的一个文件,再把另一个文件删除?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-1 08:46:25 | 显示全部楼层
jackz007 发表于 2024-7-31 19:48
"合并"两个文件是指把符合条件的两个文件的字节内容合并后写入其中的一个文件,再把另一个文件删除 ...

不是,两张图片左右合在一起(新图存放另外文件夹)。不需要删除
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-18 21:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表