在分辨率数组中找到最接近的较大分辨率和最近的宽高比

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.widthscreen.height确定$needle.

在服务器端,我将获取给定分辨率的最接近的较大值,将其缩小以适应整个屏幕,同时保留纵横比,如果某些内容与尺寸重叠,则裁剪它以完全适合屏幕.

问题:

虽然缩放和裁剪一切都很简单,但我想不出找出最接近的较大值的方法来加载参考图像.

提示:

如果它有帮助,$resolutions并且$needle可以采用不同的格式,即:array('width' => x, 'height' => y).

尝试:

我尝试用levenshtein距离进行实验:http://codepad.viper-7.com/e8JGOw
显然,它只适用于768x1280并且产生了结果800x1280.因为320x240它导致480x640但这次不合适.

Pop*_*les 9

试试这个

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)