当您在Imagick
上调用Imagick::thumbnailImage($w, $h)
时,有什么方法可以告诉{{1}}个实例的尺寸?
答案 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
或$h
为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();
}
可悲的是,它必须调整图像的大小才能工作;它比基于算法的解决方案慢很多倍。但它确实有效。
如果其他人有更好的答案,我会检查它。
答案 2 :(得分:0)
据推测,其中一个尺寸(宽度或高度)将完全符合缩略图调用中要求的尺寸。您可以通过比较thumbW / width和thumbH / height的比率来确定哪一个,将使用两者中较小的一个。缩略图尺寸名义上是宽*比和高*比。唯一剩下的就是转换为整数,选择是向上舍入,向下舍入,舍入到最近。我不知道Imagick使用哪一个,但实验并不难看哪一个匹配。
我也不知道当两个比率小于1时,即当原始图像小于请求的缩略图大小时会发生什么。一个简单的实验也应该清除它。
很抱歉没有自己进行实验,但PHP不在我的保留曲目中。