Donnerstag, April 9, 2020

In welches format hat PIL ist putdata müssen die Daten sein?

Ich speichern eines Bildes werden die Pixel in einem einzelnen multiprocessing.Array von Ganzzahlen, die indiziert werden können, wie

self.data[x*height + y]

als dieser ist bequem zu bedienen, mit IPC.

Ich versuche zum speichern der Pixel, um eine Datei mit PIL ‚ s putdata() um es schneller zu machen als mit putpixel() oder die [] – Indizierung. Allerdings kann ich nicht herausfinden, in welches format hat putdata() wollen die Bilddaten.

Ich dachte, die gleiche Art von Indizierung wäre die Arbeit mit 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")

selbst.intToRGB() gibt ein Tupel(r, g, b).

Aber der code oberhalb der Ergebnisse auf einen 90 Grad gedreht Bild mit viel Wiederholung.

In welches format hat PIL ist putdata müssen die Daten sein?

Wenn ich putpixel() anstelle von putdata() wie folgt:

    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]

produziert

In welches format hat PIL ist putdata müssen die Daten sein?

InformationsquelleAutor juke | 2012-01-27

1 Kommentar

  1. 4

    Ich glaube, ich sehe das problem in deiner ersten Zeile:

    self.data[x*height + y]

    Bilddaten ist in der Regel organisiert die andere Weise herum:

    self.data[y*width + x]

Kostenlose Online-Tests