Warum wird ein Int als Float erkannt?

Sep 15 2020

Ich muss einen Größenänderungsalgorithmus in Python mit Pillow erstellen. Einige Var sind auf Französisch. Hier füge ich am Ende einer Weile zu i hinzu (also ist ich immer ein int) und x ist immer ein int, da es außerhalb des Bereichs liegt. a [x] ist ein Tupel.

from PIL import Image
photo=Image.open("meh.jpg")
from random import randint

taille=photo.size
largeur=int(taille[0]*facteur)
hauteur=int(taille[1]*facteur)
diffhauteur=hauteur-taille[1]
difflargeur=largeur-taille[0]
newImage= Image.new('RGB', (largeur,hauteur))

if diffhauteur>1:
    i=0
    while i !=taille[0]:
        a=[]
        for b in range(taille[1]):
            liste.append(photo.getpixel((i,b))) #get all the data of the pixels in the row
        for b in range(diffhauteur): #add some pixel  (gradient) to get the lenght of the new img
            index=randint(0,len(a)-2)
            pixel2=a[index+1]
            pixel1=a[index]
            ab=  degrade(pixel1,pixel2) #create a gradient of two pixels as a tuple
            a.insert(index,ab)
        for x in range (hauteur):#add the row to the new img
            newImage.putpixel((i,x),a[x])
        i=i+1

newImage.show()

Aber ich bekomme diesen Fehler:

#here are the values
a[x]=(0.0, 0.0, -1.0)
i=0
x=6
line 71, in resizing
    newImage.putpixel((i,x),a[x])
 
TypeError: integer argument expected, got float

Dies geschieht nicht für einen bestimmten Wert. Es ist völlig zufällig

Hat jemand eine Antwort? Weil es schwierig oder einfach zu einfach erscheint, werde ich morgen meinen Lehrer fragen, aber ich weiß nicht, ob ich das lösen kann. Danke

Antworten

1 Jakob Sep 15 2020 at 03:10

a[x]ist kein Tupel von, intswie von der Funktion angefordert, sondern ein Tupel von floats. Daher müssen Sie dieses Tupel in eine Ganzzahl konvertieren.

siehe hier

Sie können das Tupel einer Ganzzahl zuordnen:

for x in range (hauteur):
    a2 = tuple(map(int, a[x]))
    newImage.putpixel((i,x),a2)