1

我正在尝试输入图像(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)
4

3 回答 3

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)
于 2013-04-15T16:04:53.820 回答
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)

这还将检查您的范围是否正确。如果不是,您将在最终图像中看到翻转和未翻转的部分,显示哪些部分超出了您的范围。

于 2013-04-15T16:26:58.617 回答
0

如果您不反对使用外部库,我会推荐Python Imaging Library。特别是,该ImageOps模块有一个mirror功能应该完全符合您的要求。

于 2013-04-15T15:59:47.110 回答