如何在python PIL中翻译图像?

如何在python PIL中翻译图像?,python,windows,image-processing,pillow,Python,Windows,Image Processing,Pillow,我的意图如下所示: 我的职能: def translacao(imagem1): imagem1.save("translate.png") destino = Image.open("translate.png") destino = destino.resize((400,400)) #Tamanho Imagem - Largura e Altura width = destino.size[0] height = destino.size[1] x_loc

我的意图如下所示:

我的职能:

def translacao(imagem1):

  imagem1.save("translate.png")
  destino = Image.open("translate.png")
  destino = destino.resize((400,400))
  #Tamanho Imagem - Largura e Altura
  width = destino.size[0]
  height = destino.size[1]
  x_loc = 20
  y_loc = 20
  x_loc = int(x_loc)
  y_loc = int(y_loc)
  imagem1.convert("RGB")
  destino.convert("RGB")

  for y in range(0, height):

     for x in range(0, width):

       xy = (x, y)     
       red, green, blue = destino.getpixel(xy)    
       x += x_loc    
       y += y_loc    
       destino.putpixel((x, y), (red, green, blue))

  return destino.save("translate.png")
出现以下错误:

 C:\Python27\python.exe C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py
 Traceback (most recent call last):
 File "C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py", line 289, in <module>
 translacao(imagem1)
 File "C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py", line 262, in translacao destino.putpixel((x, y), (red, green, blue))
 File "C:\Python27\lib\site-packages\PIL\Image.py", line 1269, in putpixel
 return self.im.putpixel(xy, value)
 IndexError: image index out of range
C:\Python27\python.exe C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py
回溯(最近一次呼叫最后一次):
文件“C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py”,第289行,在
translacao(图像M1)
文件“C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py”,第262行,以translacao destino.putpixel((x,y)、(红、绿、蓝))表示
文件“C:\Python27\lib\site packages\PIL\Image.py”,第1269行,单位为putpixel
返回self.im.putpixel(xy,值)
索引器:图像索引超出范围

进程结束,退出代码为1

您正在x和y上迭代,但在每次迭代中都会更改它:

对于范围(0,高度)内的y:

您可以尝试迭代:

 for y in range(0,height-yloc):
     for x in range(0,height-xloc):
        xy = (x, y)     
        red, green, blue = destino.getpixel(xy)    
        x += x_loc  
        y += y_loc  
        #at this point x can be outside of 0..height-1 and y can be outside of 0..width-1
        destino.putpixel((x, y), (red, green, blue))
顺便说一句,范围(0,a)可以写为范围(a)

此外,这两个命令没有任何作用,因为您没有将其指定给任何变量:

imagem1.convert("RGB")
destino.convert("RGB")

我的同事设法解决了这个问题。解决方案如下:

 destino = Image.open("foto.png")
    #Tamanho Imagem - Largura e Altura
    lar = destino.size[0]
    alt = destino.size[1]
    x_loc = 200
    y_loc = 200
    imagem_original = np.asarray(destino.convert('RGB'))
    for x in range(lar):
        for y in range(alt):
            if x >= x_loc and y >= y_loc:
               yo = x - x_loc
               xo = y - y_loc
               destino.putpixel((x,y), (imagem_original[xo,yo][0],imagem_original[xo,yo][1],imagem_original[xo,yo][2]))
            else:
               destino.putpixel((x,y), (255, 255, 255, 255))
    destino.save("translate.png")

问题是,x和y正在被翻译,翻译后不在图像范围内。
 destino = Image.open("foto.png")
    #Tamanho Imagem - Largura e Altura
    lar = destino.size[0]
    alt = destino.size[1]
    x_loc = 200
    y_loc = 200
    imagem_original = np.asarray(destino.convert('RGB'))
    for x in range(lar):
        for y in range(alt):
            if x >= x_loc and y >= y_loc:
               yo = x - x_loc
               xo = y - y_loc
               destino.putpixel((x,y), (imagem_original[xo,yo][0],imagem_original[xo,yo][1],imagem_original[xo,yo][2]))
            else:
               destino.putpixel((x,y), (255, 255, 255, 255))
    destino.save("translate.png")