PIL如何在1张新图像上调整大小,分割和共享图像?

时间:2017-01-27 13:36:30

标签: python python-3.x python-imaging-library

我试图制作一张popart图像(如下所示),但我不知道如何调整图像大小,然后将其分割为在一张大图像上共享的9张较小图像,这样可以保留与原始尺寸相同。 这是脚本(使popart成为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] if type(p)==int: p=(p,p,p) 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() 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() 的脚本部分:

z

以下是我想要制作的内容:popart

出于这个(我知道颜色不是很完美):chev.png

我也知道我使用简单的变量,例如Original_Image,我应该使用{{1}}。我只是想知道如何调整它并将其拆分,同时保持原始图像大小。

1 个答案:

答案 0 :(得分:0)

我有9个不同的图像,每个图像都命名为result0.png; result1.png; result2.png;...,所以我创建了一个包含这些图像的列表,然后我用for循环一次打开它们,然后我调整它们的大小和它们中的每一个取决于他们的位置,在新创建的图像中。 这是代码:

 Img1=[None]*9
    pixels1=[None]*9
    Imaz=Image.new("RGB",(basewidth*3,hsize*3))
    pixels=Imaz.load()
    for i in range(9):
        Img1[i]=Image.open(''+dir_path+'\\PopArt\\Resized Images\\resized_image'+str(i)+'.png')
        pixels1[i]=Img1[i].load()


    for x in range(0,basewidth):
        for y in range(0,hsize):
            pixels[x,y]=pixels1[0][x,y]
        for y in range(hsize,hsize*2):
            pixels[x,y]=pixels1[1][x,y-hsize]
        for y in range(hsize*2,hsize*3):
            pixels[x,y]=pixels1[2][x,y-hsize*2]

    for x in range(basewidth,basewidth*2):
        for y in range(0,hsize):
            pixels[x,y]=pixels1[3][x-basewidth,y]
        for y in range(hsize,hsize*2):
            pixels[x,y]=pixels1[4][x-basewidth,y-hsize]
        for y in range(hsize*2,hsize*3):
            pixels[x,y]=pixels1[5][x-basewidth,y-hsize*2]

    for x in range(basewidth*2,basewidth*3):
        for y in range(0,hsize):
            pixels[x,y]=pixels1[6][x-basewidth*2,y]
        for y in range(hsize,hsize*2):
            pixels[x,y]=pixels1[7][x-basewidth*2,y-hsize]
        for y in range(hsize*2,hsize*3):
            pixels[x,y]=pixels1[8][x-basewidth*2,y-hsize*2]
    Imaz = Imaz.resize((size[0] , size[1] ), PIL.Image.ANTIALIAS)
    Imaz.save(""+dir_path+"\\PopArt\\Result Image\\result.png")