2016-02-13 104 views
2

我遇到了一个简单的图片查看器问题。您会看到我希望将用户选择的图片放大或缩小,具体取决于图片的宽度和高度。因此,1920 x 1080的图片会缩小到可管理的尺寸,但40 x 40的图片看起来足够大,可以清晰地看到。Python自动缩放算法?

这个比例因子我最好喜欢在一个单独的变量,并没有使用IF语句,因为做IF pic_h> 100:等等......你明白了。

这里是我在哪里:

for x in range(int(pic_w)): 
    xline = target.readline() 
    for y in range(int(pic_h)): 
     pixel_data = xline[y:y+1] 

     sf = <THIS IS THE BIT I NEED> 
     y1b = (y*2)+0 
     x1b = (x*2)+0 
     y2b = (y*2)+2 
     x2b = (x*2)+2 

     y1w = (y*2)+0 
     x1w = (x*2)+0 
     y2w = (y*2)+2 
     x2w = (x*2)+2 

     if pixel_data == "1": 
      pixel = canvas.create_rectangle(y1b, x1b, y2b, x2b, fill="black") 
     elif pixel_data == "0": 
      pixel = canvas.create_rectangle(y1b, x1b, y2b, x2b, fill="white") 
     else: 
      blah blah blah ............ 

的可变因素pic_h和pic_w在图象的高度和宽度。

+0

有这许多解决方案,但你可以尝试什么是您使用的GUI工具包'SF = MAX(100/pic_w,100/pic_h)'对于初学者 – Selcuk

+0

?如果你正在做我认为你正在做的事,并且这是在Tk中,canvas.create_rectangle将为每个像素创建一个活动对象,这将非常非常缓慢并且内存很大。尝试使用像PIL或ImageMagick这样的库来进行图像操作,以创建一个可以高效传送的单个Bitmap对象。 –

+0

是的这是真的它是在tkinter,我意识到这是非常缓慢,但它是学校的挑战,因此一部分^好主意,但挑战有标准:D –

回答

1
width, height = maximum size in pixels 
x, y = number of pixels 

maxSize = min(width, height) 
width = = (maxSize//x)*x 
height = (maxSize//y)*y 

xScale = (width/x) 
yScale = (height/y) 

for row in xrange(y): 
    for column in xrange(x): 
    canvas.create_rectangle((column * xScale, row * yScale, (column * xScale)+xScale, (row * yScale)+yScale), fill=data) 
+0

请提供一些评论和理由为您的答案,而不是简单张贴一块代码。 – Suever

+0

我喜欢这样的事实,但我理想上喜欢它包含在'sf'变量 –

+0

我可以占用大量空间,或者我可以给出一个简短的简洁答案并且更高效。无论如何,OP的作者可以访问包含所有这些代码的git仓库,所以我已经提供了尽可能多的上下文。 – SolarFactories