预测Imagick :: thumbnailImage()维度

时间:2012-04-19 23:05:59

标签: php image-processing imagemagick thumbnails

当您在Imagick上调用Imagick::thumbnailImage($w, $h)时,有什么方法可以告诉{{1}}个实例的尺寸?

3 个答案:

答案 0 :(得分: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&amp; h,所需的w&amp; h,以及由imagick生成的尺寸),那将更有帮助。

答案 1 :(得分:0)

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

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();
}

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

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

答案 2 :(得分:0)

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

我也不知道当两个比率小于1时,即当原始图像小于请求的缩略图大小时会发生什么。一个简单的实验也应该清除它。

很抱歉没有自己进行实验,但PHP不在我的保留曲目中。