В каком формате для данных PIL нужны данные? - PullRequest
2 голосов
/ 27 января 2012

Я храню пиксели изображения в одной многопроцессорной обработке. Массив целых чисел, который можно индексировать как

self.data[x*height + y]

, поскольку это удобно использовать с IPC.

Я пытаюсь сохранить пиксели в файл, используя putdata () PIL, чтобы сделать это быстрее, чем используя putpixel () или индексирование [].Однако я не могу понять, в каком формате putdata () хочет изображения.

Я думал, что тот же тип индексации будет работать с putdata ()

def write(self):
    im = Image.new("RGB", (self.width, self.height))
    imagedata = [self.intToRGB(self.data[i*self.height + j]) 
                     for i in range(self.width) 
                        for j in range(self.height)]
    im.putdata(imagedata)
    im.save(self.filename, "PNG")

self.intToRGB () возвращает кортеж (r, g, b).

Но приведенный выше код приводит к повороту изображения на -90 градусов с большим количеством повторений.

crooked

Если я использую putpixel () вместо putdata (), вот так:

    pic = im.load()
    for i in range(self.width):
        offset = i * self.height
        for j in range(self.height):
            pic[i, j] =  imagedata[i * self.height + j]

производит

this

1 Ответ

4 голосов
/ 27 января 2012

Мне кажется, я вижу проблему в вашей первой строке:

self.data[x*height + y]

Данные изображения, как правило, организованы наоборот:

self.data[y*width + x]
...