Python PIL连接图像

时间:2016-01-19 17:52:36

标签: python image python-imaging-library

我正在开展一个需要连接大量图像的项目(80282)。每个图像都是256 x 256像素,有些文件是空的(没有图像),所以我需要创建一个空白图像来替换文件。我有这种格式的数据:data-D0H0-X52773-Y14041

X和Y对应于我需要按顺序连接的坐标。订单从左上角X52773-Y14314到右下角X52964-Y14041。它是X上的294次迭代和Y上的274次迭代。这里是我编写的代码无法正常工作,如果您有想法,我可以使用任何帮助,目前,我的图像在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')

编辑: 以下是我根据您的回答修改的新代码。但是,我仍然收到错误:     struct.error:'我'格式要求0< = number< = 4294967295

不确定我的坐标计算是否正确。

CODE:

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')

1 个答案:

答案 0 :(得分:2)

你的坐标算术看起来有些偏差。由于您的图像是256x256,因此您不应该像在代码中一样将inc / dec x和y加1。 以下代码尚未经过测试,但应提供一般概要。

from PIL import Image
import glob

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:])
    y_coord = int(tmp_arr[3][1:])
    small_img = Image.open(filename)
    new_im.paste(small_img, (x_coord, y_coord))

new_im.show()
new_im.save('full_image.png')