我正在尝试输入图像(image1)并将其水平翻转然后保存到文件(image2)。这可行但不是我想要的方式
目前这段代码为我提供了翻转图像,但它只是显示图像的右下角,因此尺寸错误。我在某处覆盖某些东西吗?我只是希望代码水平翻转图像并显示整个图片翻转。我哪里出错了?
而我不能只使用镜像功能或反向功能,我需要编写算法
我得到了正确的窗口大小,但图片大小不正确
def Flip(image1, image2):
img = graphics.Image(graphics.Point(0, 0), image1)
X, Y = img.getWidth(), img.getHeight()
for y in range(Y):
for x in range(X):
r, g, b = img.getPixel(x,y)
color = graphics.color_rgb(r, g, b)
img.setPixel(X-x, y, color)
win = graphics.GraphWin(img, img.getWidth(), img.getHeight())
img.draw(win)
img.save(image2)
答案 0 :(得分:2)
我认为你的问题就在这一行:
win = graphics.GraphWin(img, img.getWidth(), img.getHeight())
GraphWin构造函数的第一个参数应该是标题,但是你给它一个Image对象。这让我相信你提供的宽度和高度可能会被忽略。 GraphWin的默认宽度和高度是200 x 200,因此根据图像的大小,这可能就是为什么只绘制其中的一部分。
尝试这样的事情:
win = graphics.GraphWin("Flipping an Image", img.getWidth(), img.getHeight())
另一个问题是图像的锚点是错误的。根据文档,锚点是图像的中心将被渲染的位置(因此在0,0,您只能看到图片的右下象限)。如果您不知道创建时图像的大小,这是一个可能的解决方案:
img = graphics.Image(graphics.Point(0, 0), image1)
img.move(img.getWidth() / 2, img.getHeight() / 2)
答案 1 :(得分:2)
您正在编辑源图像。这将是 最好创建一个图像副本并改为设置这些像素:
创建一个新图像进行编辑:
img_new = img
将像素值分配给:
img_new.setPixel(X-x, y, color)
取而代之的是:
win = graphics.GraphWin(img_new, img_new.getWidth(), img_new.getHeight())
img_new.draw(win)
img_new.save(image2)
这也将检查您的范围是否正确。如果不是,您将在最终图像中看到翻转和未翻盖的部分,显示哪些部分超出了您的范围。
答案 2 :(得分:0)
如果您不反对使用外部库,我建议使用Python Imaging Library。特别是,ImageOps
模块具有mirror
函数,该函数应该完全符合您的要求。