Python Can';t使用循环将图像粘贴到正方形中
我无法实现以正方形形式粘贴图像(如果我为Python Can';t使用循环将图像粘贴到正方形中,python,image,for-loop,python-imaging-library,paste,Python,Image,For Loop,Python Imaging Library,Paste,我无法实现以正方形形式粘贴图像(如果我为n_album选择9,我应该有一个3x3的拼贴)。它只适用于1x1,如果更多,它会将同一个图像粘贴到另一个图像应该位于的位置 这是我的密码: def make_montage(n_album, path): x_offset = width #Constant resized image width y_offset = height #Constant resized image height c = [] x
n_album
选择9,我应该有一个3x3的拼贴)。它只适用于1x1,如果更多,它会将同一个图像粘贴到另一个图像应该位于的位置
这是我的密码:
def make_montage(n_album, path):
x_offset = width #Constant resized image width
y_offset = height #Constant resized image height
c = []
x = 0
img = Image.new('RGB', (n_album*height + y_offset*2, n_album*width + x_offset*2), color = (0, 0, 0))
for file_name in os.listdir(path):
print(f"Processing {file_name}")
c.append(file_name)
print(f"root of n_album = {int(math.sqrt(n_album))}")
#Loop in square
for i in range(int(math.sqrt(n_album))):
for j in range(int(math.sqrt(n_album))):
try:
cover = Image.open(os.path.join(path, c[i + j]))
print(f"Pasting {str(c[i + j])}")
img.paste(cover, (int(i * height + y_offset), int(j * width + x_offset)))
except:
print("Je code mal mdr")
img.save(f'{path}\\{n_album}x{n_album}_musical.png')
#Clean
for file_name in os.listdir(path):
if file_name != f'{n_album}x{n_album}_musical.png':
print(f"Deleting {file_name}")
os.remove(os.path.join(path, file_name))
这是一个2x2的结果,图片的顺序是:链接,马里奥,塞尔达公主,桃子
我发现您的代码中存在几个问题:
- 在方法声明中,还应传递每个图像的(所需)宽度和高度。(同样,您的方法假设
和宽度
在外部正确设置。)这还有一个优点,即您可以在循环中动态调整图像大小高度
- 您不需要注意,何时使用
以及何时使用n_相册
。(参见您的2x2蒙太奇:您显然初始化了4x4蒙太奇。)对于后者,创建一个变量,如int(math.sqrt(n_相册))
,这样您就不会一直使用这个n_per_axis
术语math.sqrt
- 在嵌套循环中,有
和i=1,2,3
。使用j=1,2,3
不是从c[i+j]
访问正确图像的正确方法。(在你的2x2蒙太奇中,你得到(0+1)=1和(1+0)=1,所以马里奥两次。)设置一个(全局)图像计数器(比如说c
),并随着每次进入内循环而递增k
- 如果这不是你问题的重点,不要发布代码,包括删除文件
def make_montage(n_相册、路径、宽度、高度):#谢谢!关于调整大小,我做了另一个函数来调整我的图像文件夹中所有图像的大小