我正在编写一个 python 代码,该代码从命令行获取图像名称,并将其打印在窗口中,根据用户的喜好重新缩放,即输入python3.2 resize.py image.gif 2 3将获取图像。 gif 和两倍的宽度和三倍的高度。我编写了一个将图像翻两番的代码:
import sys
from cImage import *
def main():
oldImage = FileImage(sys.argv[1])
width = oldImage.getWidth()
height = oldImage.getHeight()
myWin = ImageWin("Old Image", width, height)
myNewWin = ImageWin("Quadrupled Image", width*4, height*4)
newImage = EmptyImage(width*4, height*4)
for r in range(width):
for c in range(height):
pixel = oldImage.getPixel(r, c)
newImage.setPixel(4*r, 4*c, pixel)
newImage.setPixel(4*r, 4*c+1, pixel)
newImage.setPixel(4*r, 4*c+2, pixel)
newImage.setPixel(4*r, 4*c+3, pixel)
newImage.setPixel(4*r+1, 4*c, pixel)
newImage.setPixel(4*r+1, 4*c+1, pixel)
newImage.setPixel(4*r+1, 4*c+2, pixel)
newImage.setPixel(4*r+1, 4*c+3, pixel)
newImage.setPixel(4*r+2, 4*c, pixel)
newImage.setPixel(4*r+2, 4*c+1, pixel)
newImage.setPixel(4*r+2, 4*c+2, pixel)
newImage.setPixel(4*r+2, 4*c+3, pixel)
newImage.setPixel(4*r+3, 4*c, pixel)
newImage.setPixel(4*r+3, 4*c+1, pixel)
newImage.setPixel(4*r+3, 4*c+2, pixel)
newImage.setPixel(4*r+3, 4*c+3, pixel)
oldImage.draw(myWin)
newImage.draw(myNewWin)
myWin.exitOnClick()
myNewWin.exitOnClick()
main()
但是我在试图弄清楚如何编辑我的代码以便它按要求对其进行缩放时遇到了麻烦。我觉得我应该能够实现一个 for 循环,但我很难让事情正常工作。
任何帮助将非常感激!编辑:
我正在使用以下修改后的代码:
from cImage import *
import sys
def main():
oldImage = FileImage(sys.argv[1])
oldWidth = oldImage.getWidth()
oldHeight = oldImage.getHeight()
widthScalar = int(sys.argv[2])
heightScalar = int(sys.argv[3])
newWidth = oldWidth * widthScalar
newHeight = oldHeight * heightScalar
myWin = ImageWin("Old Image", oldWidth, oldHeight)
myNewWin = ImageWin("Scaled Image", newWidth, newHeight)
newImage = EmptyImage(newWidth, newHeight)
for r in range(oldHeight*heightScalar):
for c in range(oldWidth*widthScalar):
pixel = oldImage.getPixel(r // heightScalar, c // widthScalar)
newImage.setPixel(r, c, pixel)
oldImage.draw(myWin)
newImage.draw(myNewWin)
myWin.exitOnClick()
myNewWin.exitOnClick()
main()
我也尝试过使用更复杂的方法:
for r in range(oldHeight):
for c in range(oldWidth):
pixel = oldImage.getPixel(r,c)
for i in range(heightScalar):
for j in range(widthScalar):
myNewImage.setPixel((heightScalar*r)+i, (widthScalar*c)+j, pixel)
我已经用相等的标量(即 3 x 3)对其进行了测试,它适用于方形图像,但是当我尝试更改其中一个时,出现错误:
ValueError:像素索引超出范围。
当我尝试使用非方形图像时,我得到了我的坐标超出范围的错误。
我有点不知所措......谢谢你的帮助! - - - - - - - - - - - - - - - - - - - - - - - 我已经走了并测试了我的quadruple.py和resize.py,并且它们可以使用方形图像,但是当我放入非方形图像时,我得到以下信息:
像素 = oldImage.getPixel(r, c)
文件“/Users/jakebenedict/CPS/Lab6/cImage.py”,第 313 行,在 getTkPixel 中
p = [int(j) for j in self.im.get(x,y).split()]
文件“/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/tkinter/init .py ”,第 3260 行,在 get
return self.tk.call(self.name, 'get', x, y)
_tkinter.TclError: pyimage1 get: 坐标超出范围
不太清楚为什么这么说...