代码之家  ›  专栏  ›  技术社区  ›  winsmith

对这种裁剪算法的更优雅的重新表述是什么?(Python语言)

  •  4
  • winsmith  · 技术社区  · 17 年前

    我想在Django应用程序中裁剪一个缩略图,这样我就可以得到一个显示图像中心的二次图像。我同意,这并不难。

    我已经写了一些代码,正是这样做,但不知怎的,它缺乏一定的。。。优雅。我不想玩代码高尔夫,但我认为一定有一种方式来表达这种更短、更具Python风格的风格。

    x = y = 200 # intended size
    image = Image.open(filename)
    width = image.size[0]
    height = image.size[1]
    if (width > height):
        crop_box = ( ((width - height)/2), 0, ((width - height)/2)+height, height )
        image = image.crop(crop_box)
    elif (height > width):
        crop_box = ( 0, ((height - width)/2), width, ((height - width)/2)+width )
        image = image.crop(crop_box)
    image.thumbnail([x, y], Image.ANTIALIAS)
    

    你有什么想法吗?

    编辑:

    4 回复  |  直到 17 年前
        1
  •  9
  •   Daniel Brückner    17 年前

    size = min(image.Size)
    
    originX = image.Size[0] / 2 - size / 2
    originY = image.Size[1] / 2 - size / 2
    
    cropBox = (originX, originY, originX + size, originY + size)
    
        2
  •  6
  •   Steef    17 年前

    这个 fit() PIL中的功能 ImageOps 模块执行您想要的操作:

    ImageOps.fit(image, (min(*image.size),) * 2, Image.ANTIALIAS, 0, (.5, .5))
    
        3
  •  1
  •   SilentGhost    17 年前
    width, height = image.size
    if width > height:
        crop_box = # something 1
    else:
        crop_box = # something 2
    image = image.crop(crop_box)
    image.thumbnail([x, x], Image.ANTIALIAS)   # explicitly show "square" thumbnail
    
        4
  •  0
  •   andre andre    16 年前

    我想对jepg图像进行内容分析。我想要一个jpeg图像,比如251 x 261,然后通过一个算法将其裁剪为96 x 87。这个程序能做到这一点吗,就像t编写一个智能裁剪算法,并提示重新编辑图像一样。

    推荐文章