Как объединить 100 изображений, чтобы получить огромное изображение? - PullRequest
0 голосов
/ 23 октября 2018

enter image description here

У меня возникла проблема со слиянием 100 изображений, так что они создают огромную картинку 10 x 10, как указано выше: Я попробовал так:

from PIL import Image
image1 = Image.open("4XP6edit.png")
image2 = Image.open('4MBSedit.png')
(width, height) = image1.size
result_width = 10*width
result_height = 10*height

result = Image.new('RGB', (result_width, result_height))
result.paste(im=image1, box=(0, 0))
result.paste(im=image2, box=(width, 0))
result.paste(im=image2, box=(2*width, 0))
# and so on until 10*width, 0 and than:
result.paste(im=image10, box=(0, height))
result.paste(im=image10, box=(0, 2*height))

Это прекрасно работает, но я хочу, чтобы он создавался автоматически в цикле for или в sth.Но мое предложение не работает .. Может кто-то найти мою ошибку?

length = len(protein_list)
k=0; m=0; j=0

for i in range(length):
    image= Image.open(str(protein_list[i] + 'edit.png')

    (width, height) = image.size

    result_width = 10*width 
    result_height = 10*height

    result = Image.new('RGB', (result_width, result_height))
    if (k == 10): k = 0
    if (j >= 0 and j <= 9):  m = 0
    if (j >= 10 and j <= 19):  m = 1
    if (j >= 20 and j <= 29): m = 2
    if (j >= 30 and j <= 39): m = 3
    if (j >= 40 and j <= 49): m = 4    
    if (j >= 50 and j <= 59): m = 5
    if (j >= 60 and j <= 69): m = 6    
    if (j >= 70 and j <= 79): m = 7
    if (j >= 80 and j <= 89): m = 8
    if (j >= 90 and j <= 99): m = 9    

    result.paste(im=image, box=(k*width, m*height))
    k= k+1
    j=j+1


result

Я знаю это, если часть действительно некрасива, но я новичок в программировании, поэтому, пожалуйста, извините это .. Может кто-нибудь помочь мне с этим?Он показывает огромную черную картинку 10х10, на которой отображается одна картинка proteinedit.png .. она выглядит так enter image description here

1 Ответ

0 голосов
/ 23 октября 2018

это выглядит так, потому что вы определяете свое изображение результата на каждой итерации цикла.Если все изображения имеют одинаковый размер, вы можете сделать что-то вроде этого:

length = len(protein_list)
k=0; m=0; j=0
result = None

    for i in range(length):
        image= Image.open(str(protein_list[i] + 'edit.png')
        if result is None:
            (width, height) = image.size

            result_width = 10*width 
            result_height = 10*height

            result = Image.new('RGB', (result_width, result_height))

    if (k == 10): k = 0
    ...

result

Остальная часть кода может использовать множество улучшений, поэтому, если это сработает, я перенесу этот код в Code Review SO.

...