优草派  >   Python

Python实现拼接多张图片的方法

张晓东            来源:优草派

在许多应用场景中,我们需要将多张图片拼接在一起,比如将多张小图片拼接成一张大图,或者将多张截图竖直或水平拼接成一张长图。Python中的Pillow库为我们提供了便捷的实现方式。

Python实现拼接多张图片的方法

基础拼接

Pillow库提供了多种图像处理功能,实现图片拼接只需要使用Image对象的paste()方法即可。下面是实现从左到右水平拼接图片的代码示例:

```python

from PIL import Image

# 打开图片

image1 = Image.open('image1.png')

image2 = Image.open('image2.png')

# 获取图片尺寸

width1, height1 = image1.size

width2, height2 = image2.size

# 创建新图片对象

new_image = Image.new('RGB', (width1 + width2, max(height1, height2)))

# 拼接图片

new_image.paste(image1, (0, 0))

new_image.paste(image2, (width1, 0))

# 保存图片

new_image.save('merged_image.png')

```

这段代码首先使用Image对象的open()方法打开需要拼接的图片,然后使用size属性获取图片的宽高信息。接着使用Image对象的new()方法创建一个新的图片对象,拼接图片时使用paste()方法将需要拼接的图片粘贴到新的图片对象上,最后使用save()方法保存图片。

竖直拼接也类似,只需要将将第二张图片的y坐标设置为第一张图片的高度即可:

```python

new_image = Image.new('RGB', (max(width1, width2), height1 + height2))

new_image.paste(image1, (0, 0))

new_image.paste(image2, (0, height1))

new_image.save('merged_image.png')

```

网格拼接

在实际应用中,我们可能需要将多张图片按照网格排列拼接成一张大图。这时候我们需要先计算每张小图片的坐标信息,再使用paste()方法将它们拼接起来。下面是一种实现方式:

```python

from PIL import Image

import math

# 打开图片

image1 = Image.open('image1.png')

image2 = Image.open('image2.png')

image3 = Image.open('image3.png')

image4 = Image.open('image4.png')

# 获取图片尺寸

width1, height1 = image1.size

width2, height2 = image2.size

dwidth3, dheight3 = math.floor(0.5 * width1), math.floor(0.5 * height1)

dwidth4, dheight4 = math.floor(0.5 * width2), math.floor(0.5 * height2)

# 创建新图片对象

new_image = Image.new('RGB', (width1*2, height1*2))

# 拼接图片

new_image.paste(image1, (0, 0))

new_image.paste(image2, (width1, 0))

new_image.paste(image3, (0, height1))

new_image.paste(image4, (width1, height1))

# 保存图片

new_image.save('merged_image.png')

```

在这个例子中,我们先获取了所有小图片的尺寸信息,然后计算了每张小图片在大图中的坐标信息,最后使用paste()方法拼接图片。

拼接后缩放

在实际应用中,我们可能需要对拼接后的大图进行缩放,这时候我们需要先将每张小图片拼接到新的图片对象上,再进行缩放操作。下面的代码演示了如何实现拼接后缩放:

```python

from PIL import Image

# 打开图片

image1 = Image.open('image1.png')

image2 = Image.open('image2.png')

image3 = Image.open('image3.png')

image4 = Image.open('image4.png')

# 获取图片尺寸

width1, height1 = image1.size

width2, height2 = image2.size

dwidth3, dheight3 = math.floor(0.5 * width1), math.floor(0.5 * height1)

dwidth4, dheight4 = math.floor(0.5 * width2), math.floor(0.5 * height2)

# 创建新图片对象

new_image = Image.new('RGB', (width1*2, height1*2))

# 拼接图片

new_image.paste(image1, (0, 0))

new_image.paste(image2, (width1, 0))

new_image.paste(image3, (0, height1))

new_image.paste(image4, (width1, height1))

# 缩放图片

new_image = new_image.resize((new_image.width // 2, new_image.height // 2))

# 保存图片

new_image.save('merged_image.png')

```

该代码首先进行了图片拼接操作,然后使用resize()方法对拼接后的图片进行缩放。最后使用save()方法保存图片。

结论

本文介绍了使用Python中的Pillow库实现拼接多张图片的方法,包括简单的水平和竖直拼接、网格拼接以及拼接后缩放等操作。在实际应用中,我们可以根据需要进行选择使用,并根据具体情况进行调整。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行