Я работаю над проектом, где мне нужно объединить много изображений (80282). Каждое изображение имеет размер 256 x 256 пикселей, а некоторые из файлов пустые (без изображения), поэтому мне нужно создать пустое изображение для замены файла. У меня есть данные в этом формате: data-D0H0-X52773-Y14041Python PIL concatenate images
X и Y соответствуют координатам, которые мне нужно для конкатенации по порядку. Порядок находится в верхнем левом углу X52773-Y14314 в правом нижнем углу X52964-Y14041. Это 294 итерации на X и 274 на Y. Вот код, который я написал, который работает некорректно, я мог бы использовать любую помощь, если у вас есть идея, в настоящее время мои изображения не хорошо выровнены по Y. Например, изображение X10-Y10 не находится под изображением X10-Y11, как и должно быть. Я думаю, что у меня есть некоторая проблема с правильной попыткой: и за исключением: Спасибо, что вам поможет!
from PIL import Image
width = 75264
height = 70144
new_im = Image.new('RGBA', (75264, 70144))
x_offset = 0
y_offset = 0
coordinate = {}
coordinate['x']=52672
coordinate['y']=14314
#top image line should be from: X52,672-Y14,314 to X52,965-Y14,314
#bottom image line should be from: X52,672-Y14,041 to X52,965-Y14,041
for irow in range(0, 274):
for icol in range(0, 294):
try:
if (x_offset == width):
coordinate['y'] = coordinate['y'] - 1
coordinate['x'] = 52672
img = Image.open("data-D0H0-X"+str(coordinate['x'])+"-Y"+str(coordinate['y'])+".png")
except:
coordinate['x'] = coordinate['x'] + 1
blank = Image.new('RGBA', (256,256))
new_im.paste(blank, (x_offset, y_offset))
x_offset += 256
if (x_offset == width):
x_offset = 0
y_offset += 256
break
new_im.paste(img, (x_offset, y_offset))
x_offset += 256
if (x_offset == width):
x_offset = 0
y_offset += 256
coordinate['x'] = coordinate['x'] + 1
new_im.show()
new_im.save('full_image.png')
EDIT: Вот новый код, который я модифицирована в соответствии с вашим ответом. Тем не менее, я все еще получаю сообщение об ошибке: struct.error: «I» формат требует 0 < = число < = 4294967295
Не уверен, если моя координата Расчитать прямо сейчас.
КОД:
from PIL import Image
import glob
import imghdr
width = 75264
height = 70144
new_im = Image.new('RGBA', (width, height))
for filename in glob.glob('data-D0H0-X*.png'):
tmp_arr = filename.split('-')
x_coord = int(tmp_arr[2][1:6])
y_coord = int(tmp_arr[3][1:6])
info = imghdr.what(filename)
if (info == "png"):
new_img = Image.open(filename)
else:
new_img = Image.new('RGBA', (256,256))
x_coord = (x_coord-52672)*256
y_coord = (14314-y_coord)*256
print x_coord, y_coord
new_im.paste(new_img, (x_coord, y_coord))
new_im.show()
new_im.save('full_image.png')
Привет, спасибо за ваш ответ, это помогло мне! У меня есть еще один вопрос: как я могу получить белое изображение для тех случаев, когда в файле ничего нет? В настоящее время, с кодом, он говорит: IOError: не может идентифицировать данные файла изображения D0H0-X52673-Y14072.png, когда дело касается файлов без данных. – Alex
Ну, вы могли бы избавиться от пустых файлов заранее или добавить проверку, чтобы игнорировать файлы с нулевым размером в цикле: import os; для имени файла в glob.glob ('data-D0H0-X * .png'): if os.stat (filename) .st_size! = 0: .. –
Привет, я нашел способ проверить файл с помощью «imghdr» .какие()". Я отредактировал свой 1-й пост с идеей вашей помощи. Я все еще получаю ошибку, у вас есть идея, как я могу ее решить? – Alex