Python PIL int对象不可下标

Python PIL int对象不可下标,python,python-3.x,python-imaging-library,Python,Python 3.x,Python Imaging Library,我有一个图像处理程序,类似于photoshop,但非常简单(按钮和图像显示)。在我的程序中,您可以选择要使用和修改的图像。我目前正在处理程序的popart部分,但当我使用CheGevara的图像(称为“chev.png”)时,会出现以下错误(函数为“def popart()”): 当我使用诸如“fleur1.png”或“face.png”之类的其他图像时,它可以很好地工作,并且显示修改。代码如下: from tkinter import* import tkinter as Tkinter fr

我有一个图像处理程序,类似于photoshop,但非常简单(按钮和图像显示)。在我的程序中,您可以选择要使用和修改的图像。我目前正在处理程序的popart部分,但当我使用CheGevara的图像(称为“chev.png”)时,会出现以下错误(函数为“def popart()”):

当我使用诸如“fleur1.png”或“face.png”之类的其他图像时,它可以很好地工作,并且显示修改。代码如下:

from tkinter import*
import tkinter as Tkinter
from tkinter import filedialog, DISABLED
import os
import ntpath
from PIL import Image

def EchelleDeGris():
    Ima2=Image.new("RGB",(z[0],z[1]))
    px=Ima1.load()
    px1=Ima2.load()
    for x in range(z[0]):
        for y in range(z[1]):
            p=px[x,y]
            o=int((p[0]+p[1]+p[2])/3)
            px1[x,y]=(o,o,o)
    Ima2.save("ImageMod.png")
    im2 = PhotoImage(file="ImageMod.png")
    main.image = im2
    I2 = Tkinter.Label(main, image=im2)
    I2.grid(row=0, column=3, rowspan =6)

def SupprimerImage():
    I2 = Tkinter.Label(main, image=imt)
    I2.grid(row=0, column=3, rowspan =6)

def Luminosite():
    Ima2=Image.new("RGB",(z[0],z[1]))
    px=Ima1.load()
    px1=Ima2.load()
    for x in range(z[0]):
        for y in range(z[1]):
            p=px[x,y]
            px1[x,y]=(p[0]+S1.get(),p[1]+S1.get(),p[2]+S1.get())
    Ima2.save("ImageMod.png")
    im2 = PhotoImage(file="ImageMod.png")
    main.image = im2
    I2 = Tkinter.Label(main, image=im2)
    I2.grid(row=0, column=3, rowspan =6)

def AnnulerModifications():
    I2 = Tkinter.Label(main, image=im1)
    I2.grid(row=0, column=3, rowspan =6)

def PopArt():
    Ima2=Image.new("RGB",(z[0],z[1]))
    px=Ima1.load()
    px1=Ima2.load()
    for x in range(z[0]):
        for y in range(z[1]):
            p=px[x,y]
            o=int((p[0]+p[1]+p[2])/3)
            if o<85:
                px1[x,y]=(0,0,255)
            elif 85<o<170:
                px1[x,y]=(0,255,0)
            elif o>170:
                px1[x,y]=(255,0,0)
    Ima2.save("ImageMod.png")
    im2 = PhotoImage(file="ImageMod.png")
    main.image = im2
    I2 = Tkinter.Label(main, image=im2)
    I2.grid(row=0, column=3, rowspan =6)






main=Tk()

main.withdraw()
currdir = os.getcwd()
a = filedialog.askopenfilename()
main.deiconify()

main.configure(background="#a1dbcd")
main.title("Photoshop Version.Megzari")

Ima1=Image.open(a)
z=Ima1.size
nux=Image.new("RGB",(z[0],z[1]))
nuxy=nux.load()
for x in range(z[0]):
    for y in range(z[1]):
        nuxy[x,y]=(255,255,255)
nux.save("Blank.png")








if z>(400,400):
    im2 = Tkinter.PhotoImage(file="ImageBlank.png")
    main.image = im2
    I2 = Tkinter.Label(main, image=im2)
    I2.grid(padx=20, pady=20, row=0, column=1, rowspan =6)
    T1 = Tkinter.Label(main, image=im2)
    T1.grid(padx=20, pady=20, row=0, column=3, rowspan =6)
    B1 = Tkinter.Button(main, text ="Echelle de gris", command = EchelleDeGris, fg="#a1dbcd", bg="#383a39", state=DISABLED)
    B1.grid(padx=20, pady=20, row=0, column=2)
    B3 = Tkinter.Button(main, text ="Appliquer Luminosité", command = Luminosite, fg="#a1dbcd", bg="#383a39", state=DISABLED)
    B3.grid(padx=20, pady=20, row=2, column=2)
    S1 = Scale(main, from_=0, to=254, orient=HORIZONTAL, fg="#a1dbcd", bg="#383a39", state=DISABLED, length = 200)
    S1.grid(row=1, column=2)
    B2 = Tkinter.Button(main, text ="Supprimer Image", command = SupprimerImage, fg="#a1dbcd", bg="#383a39", state=DISABLED)
    B2.grid(padx=20, pady=20, row=4, column=2)
    B3 = Tkinter.Button(main, text ="Annuler Modifications", command = AnnulerModifications, fg="#a1dbcd", bg="#383a39", state=DISABLED)
    B3.grid(padx=20, pady=20, row=3, column=2)
    B4 = Tkinter.Button(main, text ="Pop Art", command = PopArt, fg="#a1dbcd", bg="#383a39", state=DISABLED)
    B4.grid(padx=20, pady=20, row=5, column=2)
elif z<(400,400):
    im1 = Tkinter.PhotoImage(file=a)
    I1 = Tkinter.Label(main, image=im1)
    I1.grid(padx=20, pady=20, row=0, column=1, rowspan =6)
    imt = Tkinter.PhotoImage(file="Blank.png")
    T1 = Tkinter.Label(main, image=imt)
    T1.grid(padx=20, pady=20, row=0, column=3, rowspan =6)
    B1 = Tkinter.Button(main, text ="Echelle de gris", command = EchelleDeGris, fg="#a1dbcd", bg="#383a39", state=NORMAL)
    B1.grid(padx=20, pady=20, row=0, column=2)
    B3 = Tkinter.Button(main, text ="Appliquer Luminosité", command = Luminosite, fg="#a1dbcd", bg="#383a39")
    B3.grid(padx=20, pady=20, row=2, column=2)
    S1 = Scale(main, from_=0, to=254, orient=HORIZONTAL, fg="#a1dbcd", bg="#383a39", length = 200)
    S1.grid(row=1, column=2)
    B2 = Tkinter.Button(main, text ="Supprimer Image", command = SupprimerImage, fg="#a1dbcd", bg="#383a39")
    B2.grid(padx=20, pady=20, row=4, column=2)
    B3 = Tkinter.Button(main, text ="Annuler Modifications", command = AnnulerModifications, fg="#a1dbcd", bg="#383a39")
    B3.grid(padx=20, pady=20, row=3, column=2)
    B4 = Tkinter.Button(main, text ="Pop Art", command = PopArt, fg="#a1dbcd", bg="#383a39")
    B4.grid(padx=20, pady=20, row=5, column=2)

s=S1.get()




main.mainloop()
从tkinter导入*
将tkinter作为tkinter导入
从tkinter导入文件对话框,禁用
导入操作系统
导入ntpath
从PIL导入图像
def EchelleDeGris():
Ima2=Image.new(“RGB”,(z[0],z[1]))
px=Ima1.load()
px1=Ima2.load()
对于范围(z[0])内的x:
对于范围(z[1])中的y:
p=px[x,y]
o=int((p[0]+p[1]+p[2])/3)
px1[x,y]=(o,o,o)
Ima2.save(“ImageMod.png”)
im2=PhotoImage(file=“ImageMod.png”)
main.image=im2
I2=Tkinter.Label(主,图像=im2)
I2.网格(行=0,列=3,行跨度=6)
def SupprimerImage():
I2=Tkinter.Label(主,图像=imt)
I2.网格(行=0,列=3,行跨度=6)
def Luminosite():
Ima2=Image.new(“RGB”,(z[0],z[1]))
px=Ima1.load()
px1=Ima2.load()
对于范围(z[0])内的x:
对于范围(z[1])中的y:
p=px[x,y]
px1[x,y]=(p[0]+S1.get(),p[1]+S1.get(),p[2]+S1.get())
Ima2.save(“ImageMod.png”)
im2=PhotoImage(file=“ImageMod.png”)
main.image=im2
I2=Tkinter.Label(主,图像=im2)
I2.网格(行=0,列=3,行跨度=6)
def环形修改():
I2=Tkinter.Label(主,图像=im1)
I2.网格(行=0,列=3,行跨度=6)
def PopArt():
Ima2=Image.new(“RGB”,(z[0],z[1]))
px=Ima1.load()
px1=Ima2.load()
对于范围(z[0])内的x:
对于范围(z[1])中的y:
p=px[x,y]
o=int((p[0]+p[1]+p[2])/3)

如果o事实上我找到了解决方案。我的chev.png是一个灰度图像,所以他的像素值是一个整数,而其他的是元组(R,G,B)。所以我要做的就是检查像素的类型:

if type(p)==int:
然后,如果是整数,他将其转换为元组:

p=(p,p,p)

你们都准备好了;)

我不能发布超过1个链接(少于10个声誉),所以我把它们放在评论中:[face.png][2];[2] :[fleur1.png][3];[3] :[fleur.png][4];[4] :最好将图像转换为RGB。如果图像被索引,则
p
将是颜色索引,并且元组
(p,p,p)
将根本不代表像素的实际颜色。只需执行
px=Ima1.load().convert('RGB')
p=(p,p,p)