[英]php - reduce image dimensions algorithm
我有一個php腳本,我想在div內顯示一些圖像,但是關於最大寬度和高度有一些限制。
例如,圖像的寬度可能為1000px,高度為600px,但是圖像的最大寬度和高度不得超過500 px,以適合div。
因此,我想轉換尺寸以使圖像適合div,但寬度和高度之間的比例保持不變。
示例:圖像尺寸:1000x600,最大寬度= 500,最大高度=400。尺寸的結果不應為500x400,而應為500x300。
我寫了一段代碼,看起來似乎行得通,但是在有很多圖像的情況下,它似乎在性能上工作不佳,因為這樣做的目的是逐步減小大小10%,直到結果達到可接受的極限。
有任何想法嗎? 先感謝您。
這最多可將您的值縮放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));
?>
每次用戶訪問您的頁面時,動態調整圖像大小並不是一個好主意。
根據您所使用的腳本( 如該腳本),您將需要先調整所有圖像的大小並保存它們,這樣,當有人訪問您的頁面時,您就不會有開銷。
顯示到目前為止的一些代碼,也許可以改進
您要問的還不太清楚。
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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.