【问题标题】:Scale an image by a single dimension (x OR y) given minimum dimensions在给定最小尺寸的情况下,按单个尺寸(x OR y)缩放图像
【发布时间】:2013-01-23 08:40:52
【问题描述】:

我知道我可以用一堆嵌套的 if 语句来做到这一点,但是我不禁觉得有一种更优雅的方式。我猜这真的只是一个数学问题,但如果确实有的话,我对 Python 的答案很感兴趣。

我有一张可以是任意尺寸/纵横比的图片。

它必须按比例放大或缩小,以使其覆盖至少 55w x 168h

这里的复杂之处在于,它需要通过一个函数进行缩放,该函数只接受一个值,该值指定正方形的边的长度,图像将放入其中。

例如,假设我们有一个大小为 1000w x 500h 的图像,我们将其缩放为 200,那么生成的图像必须适合边长为 200 的正方形,这意味着生成的图像将是 200w x 100h。

相反,如果我们的图像是 200x1000 并且我们缩放到 200,我们最终会得到 40x200。

因此,要将 1000x500 的图像缩放到 55x168,我们需要将其缩放到 336,给出 336x168 的大小,因为这是可以容纳在 336x336 边正方形内的最大图像。

要将 200x1000 的图像缩放到 55x168,我们需要将其缩放到 275 并最终得到 55x275。

希望这比泥浆更清晰!感谢您的任何想法。

理由:对于那些对我为什么通过正方形边的值进行缩放感兴趣的人,这是 Picasa 通过 URL 注入缩放图像的方式。例如采用以下 2 个 URL:

请注意,两者都有 URL 组件 s150,但其中一张图片是 150x112,另一张是 112x150。 150 是这些图像都适合的正方形的值。

【问题讨论】:

    标签: python image-scaling


    【解决方案1】:
    def name_of_function(img_x, img_y):  # for lack of a better name
        image_dimensions = (img_x, img_y)
        min_dimensions = (55.0, 168.0)
        scale = min(image_dimensions[i]/min_dimensions[i] for i in range(2))
        return max(i/scale for i in image_dimensions)
    
    name_of_function(1000, 500)
    # 336.0
    name_of_function(200, 1000)
    # 275.0
    

    很确定这就是你要找的东西。

    【讨论】:

      【解决方案2】:

      我认为您可能需要详细说明细节,但我假设该函数可以访问图像或其尺寸,否则无法进行计算。

      但是在手头,这样的东西应该可以工作:

      def percent_to_scale_to(image, box_side_px):
          img_width, img_height = Image(image).size()  # or however you get w/h
          greater_img_dimension = max(img_width, img_height)
          scale_percent = (float(box_side_px) / float(greater_img_dimension)) * 100.0
      

      您可能需要查看一些调用的签名,不要指望它只适用于剪切和粘贴,但作为伪代码,它可能会为您提供一种方法的想法. :)

      您需要注意整数除法,这可能会产生意外行为。这就是为什么在除法之前转换为浮点数的原因;否则结果会在小数点处被截断,这在大多数情况下会产生零返回值。如果您还不熟悉,对 Python 的除法行为进行一些快速研究可能是值得的。

      【讨论】:

      • 对不起,你是对的,我可能应该更好地解释我的输入,但是另一个答案已经确定了:)
      猜你喜欢
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      相关资源
      最近更新 更多