php:创建自定义大小的缩略图

时间:2011-12-13 16:14:51

标签: php image resize

我熟悉使用imagecopyresampled在php下调整图像大小和裁剪图像,但现在我遇到了一个特殊问题: 任务是从例如裁剪大图像。 1600x1200到500x120,这意味着调整大小到500px并裁剪它的高度为120px。有一些简单的方法,还是我需要自己计算裁剪值?感谢

2 个答案:

答案 0 :(得分:1)

PHP库可以帮助你调用PHPThumb。你可以在这里找到https://github.com/masterexploder/PHPThumb

他们有一个自适应调整大小的方法来完成你正在寻找的东西。 https://github.com/masterexploder/PHPThumb/wiki/Basic-Usage

答案 1 :(得分:0)

你必须自己做。

我不知道你是否要裁剪,所以这里是如何计算两者的值:

缩放图像:调整大小以适应新的w x h保持纵横比(因此1边可能比指定的短)

function calc_scale_dims($width_orig, $height_orig, $max_width, $max_height) { 

    $new_width=$width_orig;
    $new_height=$height_orig;
    $ratioh = $max_height/$new_height;
    $ratiow = $max_width/$new_width;
    $ratio = min($ratioh, $ratiow);
    // New dimensions
    $dims["w"] = intval($ratio*$new_width);
    $dims["h"] = intval($ratio*$new_height); 

    return $dims;
}

调整大小和裁剪:如果新的宽高比不同,调整图像大小并裁剪它以适应指定的wxh(例如,如果宽高比不同,图像将调整大小以匹配指定的大小尺寸和较长的尺寸,如果在中间裁剪)

function calc_crop_resize_dims($width_orig, $height_orig, $new_width, $new_height) { 

    //Calculate scaling
    $ratio_orig = $width_orig/$height_orig;
    $ratio_new = $new_width/$new_height;

    if ($ratio_new < $ratio_orig) {
       $copy_width = $height_orig*$ratio_new;
       $copy_height = $height_orig;
    } else {
       $copy_width = $width_orig;
       $copy_height = $width_orig/$ratio_new;
    }

    //point to start copying from (to copy centre of image if we are cropping)
    $dims["src_x"] = ($width_orig - $copy_width)/2;
    $dims["src_y"] = ($height_orig - $copy_height)/2;
    $dims["copy_width"] = $copy_width;
    $dims["copy_height"] = $copy_height;

    return $dims;
}