【问题标题】:Python auto-scaling algorithm?Python自动缩放算法?
【发布时间】:2016-02-13 11:12:52
【问题描述】:

我正在制作的简单图像查看器有问题。你看我想让用户选择的图片根据图片的宽度和高度进行放大或缩小。因此,一张 1920 x 1080 的图片将缩小到可管理的尺寸,但一张 40 x 40 的图片看起来足够大,可以看得很清楚。

这个比例因子我最好在单个变量中使用,并且不使用 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 是图片的高度和宽度。

【问题讨论】:

  • 有很多解决方案,但初学者可以尝试sf = max(100 / pic_w, 100 / pic_h)
  • 您使用的是什么 GUI 工具包?如果您正在做我认为您正在做的事情,并且这是在 Tk 中,canvas.create_rectangle 将为每个像素创建一个活动对象,这将非常非常缓慢并且需要大量内存。尝试使用 PIL 或 ImageMagick 之类的库来进行图像操作,以创建可以有效地进行位图处理的单个位图对象。
  • 是的,这是真的,它在 tkinter 中,我意识到这非常慢,但它是基于学校的挑战的一部分,因此 ^ 好主意,但挑战有标准:D

标签: python image algorithm scaling


【解决方案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)

【讨论】:

  • 请为您的回答提供一些评论和理由,而不是简单地发布一段代码。
  • 我喜欢它的工作原理,但我希望它全部包含在 sf 变量中
  • 我可能会占用很多空间,或者我可以给出一个简短的回答并提高效率。无论如何,OP 的作者可以访问包含所有这些代码的 git 存储库,所以我提供了尽可能多的上下文。
猜你喜欢
  • 2020-08-02
  • 2019-08-16
  • 2020-11-25
  • 2016-10-14
  • 1970-01-01
  • 2019-11-07
  • 2016-04-29
  • 2019-02-24
  • 2018-12-13
相关资源
最近更新 更多