Imagick
有什么方法可以快速判断实例在调用时会变成什么尺寸Imagick::thumbnailImage($w, $h)
?
user263078
问问题
916 次
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% 准确度处理所有可能情况的维度。(例如$w
or $h
are 的情况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 回答