jol*_*olt 4 php arrays resolution image image-resizing
我有一个数组:
$resolutions = array(
'480x640',
'480x800',
'640x480',
'640x960',
'800x1280',
'2048x1536'
);
Run Code Online (Sandbox Code Playgroud)
我想用最近的宽高比(相同的方向)检索最接近的较大值.
所以,如果$needle = '768x1280'- 800x1280.
而且,如果$needle = '320x240'- 640x480.虽然最接近的是480x640它不应该匹配,因为它的纵横比差别太大.等等等等.
我有一组图像,其分辨率如下所示$resolutions.这些图像将用于智能手机壁纸.
使用JavaScript,我发送请求screen.width并screen.height确定$needle.
在服务器端,我将获取给定分辨率的最接近的较大值,将其缩小以适应整个屏幕,同时保留纵横比,如果某些内容与尺寸重叠,则裁剪它以完全适合屏幕.
虽然缩放和裁剪一切都很简单,但我想不出找出最接近的较大值的方法来加载参考图像.
如果它有帮助,$resolutions并且$needle可以采用不同的格式,即:array('width' => x, 'height' => y).
我尝试用levenshtein距离进行实验:http://codepad.viper-7.com/e8JGOw
显然,它只适用于768x1280并且产生了结果800x1280.因为320x240它导致480x640但这次不合适.
试试这个
echo getClosestRes('500x960');
echo '<br /> try too large to match: '.getClosestRes('50000x960');
function getClosestRes($res){
$screens = array(
'landscape'=>array(
'640x480',
'1200x800'
),
'portrait'=>array(
'480x640',
'480x800',
'640x960',
'800x1280',
'1536x2048'
)
);
list($x,$y)=explode('x',$res);
$use=($x>$y?'landscape':'portrait');
// if exact match exists return original
if (array_search($res, $screens[$use])) return $res;
foreach ($screens[$use] as $screen){
$s=explode('x',$screen);
if ($s[0]>=$x && $s[1]>=$y) return $screen;
}
// just return largest if it gets this far.
return $screen; // last one set to $screen is largest
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3275 次 |
| 最近记录: |