2013-10-19 58 views
0

我正在寻找将图像调整为预定义的最大尺寸,以便在WideImage Library的帮助下保持纵横比。使用WideImage PHP库调整图像大小时保持纵横比

实施例:

最大允许Dimesions:200x200的

输入图像尺寸:安全工程师的标志(1,5:1的纵横比),

电流输出图像尺寸:200×200

预期输出图像尺寸:200x133(高宽比为1,5:1)。

当前宽高比发生变化时图像变形。应该采取什么措施来保持高宽比?

我正在使用下面的代码。

$targetWidth = 200; 
$targetHeight = 200; 

$sourceRatio = $sourceWidth/$sourceHeight; 
$targetRatio = $targetWidth/$targetHeight; 

if ($sourceRatio < $targetRatio) { 
    $scale = $sourceWidth/$targetWidth; 
} else { 
    $scale = $sourceHeight/$targetHeight; 
} 

$resizeWidth = (int)($sourceWidth/$scale); 
$resizeHeight = (int)($sourceHeight/$scale); 


$img->resize($resizeWidth, $resizeHeight) 

PS:我得到了上面的逻辑从Resize image without distortion keeping aspect ratio then crop excess using WideImage

+0

为什么这是低票?如果有什么不明确的话,PLZ会做出解释。我不是专家。 – Purus

+0

我不明白这个问题。来自doc:“默认情况下,调整大小会保持原始图像的纵横比,并且所得图像与内部的给定尺寸相符。”所以$ img-> resize(200,200)就足够了。 – user276648

+0

不会。就像你说的那样。 – Purus

回答

1

这个简单的逻辑来帮助我。

$targetWidth = 200; 
$targetHeight = 200; 

$ratio = $srcWidth/$srcHeight; 

if ($ratio > 1) { 
    $resizeWidth = $targetWidth; 
    $resizeHeight= $targetHeight/$ratio; 
} else { 
    $resizeWidth = $targetWidth * $ratio; 
    $resizeHeight= $targetHeight; 
} 

$img->resize($resizeWidth, $resizeHeight) 
相关问题