2017-02-04 4 views
0

Ich habe Programm hier, dass ich auf eine Frage hier auf Stack-Überlauf gefangen. Es soll die constrast eines Bildes einstellen, aber ich erhalte den folgenden Fehler:"TypeError: Integer-Argument erwartet, habe float" in PIL

Traceback (most recent call last): 
    File "<string>", line 420, in run_nodebug 
    File "<module1>", line 20, in <module> 
    File "<module1>", line 16, in change_contrast 
    File "C:\EduPython\App\lib\site-packages\PIL\Image.py", line 1512, in putpixel 
    return self.im.putpixel(xy, value) 
TypeError: integer argument expected, got float 

Die Post ist ziemlich alt, so dass ich die Person nicht denken, wer es geschrieben hat würde meinen Wunsch sehen, so dass ich bin Entsendung Hier. Hier ist der Code:

from PIL import Image 

def change_contrast(img, level): 
    def truncate(v): 
     return 0 if v < 0 else 255 if v > 255 else v 


    img = Image.open("C:\\Users\\omar\\Desktop\\Site\\Images\\obama.png") 
    img.load() 

    factor = (259 * (level+255))/(255 * (259-level)) 
    for x in range(img.size[0]): 
     for y in range(img.size[1]): 
      color = img.getpixel((x, y)) 
      new_color = tuple(truncate(factor * (c-128) + 128) for c in color) 
      img.putpixel((x, y), new_color) 

    return img 

result = change_contrast('test_image1.jpg', 128) 
result.save('test_image1_output.jpg') 
print('done') 

Antwort

1

Hmm, was ist truncate?

Versuchen Sie zu sagen int, wo Sie sagen truncate.

+0

truncate wird am Anfang definiert nach 'def change_contrast (img, level)' als 'def truncate (v)' –

+0

Faktor ist ein float, also new_color wird zu einem Tupel von Floats. Putpixel will ein Tupel von Ints. –

+0

Sie müssen sicherstellen, dass new_color ein Tupel von Ints ist, kein Tupel von Floats. Ändern Sie truncate, damit es einen int ... zurückgibt, oder fügen Sie int() um den Aufruf von truncate() hinzu. –

Verwandte Themen