【问题标题】:php - reduce image dimensions algorithmphp - 减少图像尺寸算法
【发布时间】:2011-08-21 06:26:45
【问题描述】:

我有一个 php 脚本,我想在 div 中显示一些图像,但是对于最大宽度和高度有一些限制。
例如,一张图片的宽度可能为 1000 像素,高度为 600 像素,但图片的最大宽度和高度不应超过 500 像素以适合 div。
所以,我想转换尺寸,使图像适合 div,但宽度和高度之间的比率保持不变。

示例:图片尺寸:1000x600,最大宽度 = 500,最大高度 = 400。 尺寸的结果不应该是 500x400,而是 500x300。

我编写了一段似乎可以工作的代码,但是当有很多图像时,它的性能似乎并不好,因为它会像将大小减小 10% 一样- 一步一步,直到结果在可接受的范围内。

有什么想法吗?提前谢谢你。

【问题讨论】:

    标签: php performance image image-scaling


    【解决方案1】:

    这会将您的值最多缩放 2 倍。

    <?php
    define('MAX_WIDTH', 500);
    define('MAX_HEIGHT', 200);
    
    function scale($w, $h)
    {
       $rw = $w; $rh = $h; $factor = 0.0;
    
       if( $rw > MAX_WIDTH )
       {
            $factor = $rw / MAX_WIDTH;
            $rw = MAX_WIDTH;
            $rh = floor($factor * $rh);
       }
       if( $rh > MAX_HEIGHT )
       {
            $factor = $rh / MAX_HEIGHT;
            $rh = MAX_HEIGHT;
            $rw = floor($factor * $rw);
       }
    
       return array($rw, $rh);
    }
    echo explode('x', scale(1000, 500));
    ?>
    

    【讨论】:

    • 正是我想要的。谢谢!
    【解决方案2】:

    每次用户访问您的页面时动态调整图像大小并不是一个好主意。

    根据您使用的脚本,like this one,您需要先调整所有图像的大小并保存它们,这样您就不会在每次有人访问您的页面时都有开销。

    显示你目前的一些代码,也许可以改进

    【讨论】:

      【解决方案3】:

      不太清楚你在问什么。

      1) 正在进行多少缩放?如果不是很多,把它留给 CSS 可能是个好主意。

      2) 我想你正在使用 GD 或 ImageMagick 什么的?也许你追求的是这样的:

      function scale($x,$y,$maxX, $maxY) {
          if ($x > $maxX) return array($maxX, $maxX / $x * $y);
          else return array($x, $y);
      }
      ...
      <declare variables $toScaleX, $toScaleY, $maxX, $maxY>
      list($x, $y) = scale($toScaleX, $toScaleY, $maxX, $maxY);
      list($x, $y) = scale($y, $x, $maxY, $maxX);
      <$x, $y, are now the desired dimensions to scale to>
      

      【讨论】:

        猜你喜欢
        • 2019-01-04
        • 1970-01-01
        • 2015-01-27
        • 2011-12-26
        • 1970-01-01
        • 2020-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多