想编写程序实现下面图片的这种效果,找了半天没有找到想要的,于是借助chatGPT获得代码并修改,得到以下代码。
from PIL import Image
import numpy as np
# 打开图片文件
image = Image.open('test1.jpg') #208*48
# 获取图片尺寸
width, height = image.size
# 计算每个方块的宽度和高度
block_width = width // 13
block_height = height // 3
# 遍历每个方块,并保存为单独的文件
for row in range(3):
for col in range(13):
# 计算方块的左上角和右下角坐标
left = col * block_width
top = row * block_height
right = left + block_width
bottom = top + block_height
# 切割图片
block = image.crop((left, top, right, bottom))
# 保存为单独的文件
block.save(f'block_{row}_{col}.jpg')
from PIL import Image, ImageOps
# 定义每个方块的尺寸和间隔
block_size = (16, 16) # 每个方块的尺寸
padding_size = 5 # 方块之间的间隔
# 创建一个空白的大图像
result_size = (
block_size[0] * 13 + padding_size * 12,
block_size[1] * 3 + padding_size * 2
)
result_image = Image.new('RGB', result_size, (255, 255, 255))
# 遍历每个方块,并将它们放在合适的位置
for row in range(3):
for col in range(13):
# 打开当前方块的图像文件
block_filename = f'block_{row}_{col}.jpg'
block_image = Image.open(block_filename)
# 将方块缩放到指定大小
block_image = block_image.resize(block_size)
# 计算方块在结果图像中的位置
left = col * (block_size[0] + padding_size)
top = row * (block_size[1] + padding_size)
right = left + block_size[0]
bottom = top + block_size[1]
# 将方块粘贴到结果图像中
result_image.paste(block_image, (left, top, right, bottom))
# 将结果图像保存到文件中
result_image.save('result.jpg')
原图
效果图