0

Imagick有什么方法可以快速判断实例在调用时会变成什么尺寸Imagick::thumbnailImage($w, $h)

4

3 回答 3

1

大概是这样的……

# 3:2 format
$w = 120; # desired width
$h = 80; # desired height

$r = 640 / 480; # current width / height 4:3 format

if ($w / $h < $r)
    $w = $h * $r;
else
    $h = $w / $r;

echo $w, $h; # 120x90 4:3 format

如果您提供尺寸(当前的 w&h、所需的 w&h 以及 imagick 生成的尺寸),它会更有帮助。

于 2012-04-19T23:25:20.417 回答
0

我找不到一种算法来找到Imagick::thumbnailImage($w, $h)能够以 100% 准确度处理所有可能情况的维度。(例如$wor $hare 的情况0等)所以,我做了这个功能:

function thumbSize($pic, $thumbW, $thumbH) {
    //make a white image of the same size
    $picsize = $pic->getImageGeometry();
    $whitepic=new Imagick();
    $whitepic->newImage($picsize['width'], $picsize['height'], "white");
    $whitepic->thumbnailImage($thumbW, $thumbH);
    return $whitepic->getImageGeometry();
}

可悲的是,它必须调整图像大小才能工作。它比基于算法的解决方案慢很多倍。但它有效。

如果其他人有更好的答案,我会检查它。

于 2012-04-20T01:03:52.020 回答
0

大概其中一个尺寸(宽度或高度)将正是您的缩略图调用中要求的尺寸。您可以通过比较 thumbW/width 和 thumbH/height 的比率来确定哪一个,将使用两者中较小的一个。缩略图尺寸名义上是宽度*比率和高度*比率。唯一剩下的就是转换为整数,选择是向上舍入、向下舍入和舍入到最接近的值。我不知道 Imagick 使用哪一个,但不难试验一下,看看哪一个匹配。

我也不知道当两个比率都小于一时会发生什么,即当原始图像小于请求的缩略图大小时。一个简单的实验也应该可以解决这个问题。

很抱歉没有自己进行实验,但 PHP 不在我的保留范围内。

于 2012-04-20T04:21:15.623 回答