Я не знаком с PIL, но я знаю, что очень легко положить кучу изображений в сетку в ImageMagick.
Как я, например, поместил 16 изображений в сетку 4 и times; 4, где я могу указать промежуток между строками и столбцами?
Я не знаком с PIL, но я знаю, что очень легко положить кучу изображений в сетку в ImageMagick.
Как я, например, поместил 16 изображений в сетку 4 и times; 4, где я могу указать промежуток между строками и столбцами?
Это легко сделать и в PIL
. Создайте пустое изображение и просто вставьте нужные изображения в любых положениях, которые вам нужны, используя paste. Вот краткий пример:
import Image
#opens an image:
im = Image.open("1_tree.jpg")
#creates a new empty image, RGB mode, and size 400 by 400.
new_im = Image.new('RGB', (400,400))
#Here I resize my opened image, so it is no bigger than 100,100
im.thumbnail((100,100))
#Iterate through a 4 by 4 grid with 100 spacing, to place my image
for i in xrange(0,500,100):
for j in xrange(0,500,100):
#I change brightness of the images, just to emphasise they are unique copies.
im=Image.eval(im,lambda x: x+(i+j)/30)
#paste the image at location i,j:
new_im.paste(im, (i,j))
new_im.show()
Развивая отличный ответ от fraxel, я написал программу, которая берет в папку (.png) изображения, количество пикселей для ширины коллажа и количество изображений в строке, и выполняет все расчеты за вас.,
#Evan Russenberger-Rosica
#Create a Grid/Matrix of Images
import PIL, os, glob
from PIL import Image
from math import ceil, floor
PATH = r"C:\Users\path\to\images"
frame_width = 1920
images_per_row = 5
padding = 2
os.chdir(PATH)
images = glob.glob("*.png")
images = images[:30] #get the first 30 images
img_width, img_height = Image.open(images[0]).size
sf = (frame_width-(images_per_row-1)*padding)/(images_per_row*img_width) #scaling factor
scaled_img_width = ceil(img_width*sf) #s
scaled_img_height = ceil(img_height*sf)
number_of_rows = ceil(len(images)/images_per_row)
frame_height = ceil(sf*img_height*number_of_rows)
new_im = Image.new('RGB', (frame_width, frame_height))
i,j=0,0
for num, im in enumerate(images):
if num%images_per_row==0:
i=0
im = Image.open(im)
#Here I resize my opened image, so it is no bigger than 100,100
im.thumbnail((scaled_img_width,scaled_img_height))
#Iterate through a 4 by 4 grid with 100 spacing, to place my image
y_cord = (j//images_per_row)*scaled_img_height
new_im.paste(im, (i,y_cord))
print(i, y_cord)
i=(i+scaled_img_width)+padding
j+=1
new_im.show()
new_im.save("out.jpg", "JPEG", quality=80, optimize=True, progressive=True)
очень хороший код для сборки множества картинок в одну. Я пытаюсь создать сетку/матрицу, но после запуска возвращается синтаксическая ошибка:
File "C:\Users\rom\Desktop\tts\img_test.py", line 28
i,j=0,0
^
SyntaxError: invalid syntax
Я работаю с Python 2.7 Я надеюсь, вы можете помочь мне с этим.