PHP适合任何大小的图像,宽高比为16:9

时间:2015-03-15 16:27:07

标签: php resize crop aspect-ratio

中午好,

我目前正在尝试了解如何裁剪已加载到服务器上的图像,其宽高比为16:9。 为了更好地理解,如果我有4:3图像,我必须剪切顶部和底部图像部分以使其适合16:9的比例。

感谢。

1 个答案:

答案 0 :(得分:2)

我拿了这个代码示例:http://myrusakov.ru/php-crop-image.html 并以这种方式根据我的需要更改了代码:

    function crop_image($image) {

    //$x_o и $y_o - Output image top left angle coordinates on input image
    //$w_o и h_o - Width and height of output image

    list($w_i, $h_i, $type) = getimagesize($image); // Return the size and image type (number)

    //calculating 16:9 ratio
    $w_o = $w_i;
    $h_o = 9 * $w_o / 16;

    //if output height is longer then width
    if ($h_i < $h_o) {
        $h_o = $h_i;
        $w_o = 16 * $h_o / 9;
    }

    $x_o = $w_i - $w_o;
    $y_o = $h_i - $h_o;

    $types = array("", "gif", "jpeg", "png"); // Array with image types
    $ext = $types[$type]; // If you know image type, "code" of image type, get type name
    if ($ext) {
      $func = 'imagecreatefrom'.$ext; // Get the function name for the type, in the way to create image
      $img_i = $func($image); // Creating the descriptor for input image
    } else {
      echo 'Incorrect image'; // Showing an error, if the image type is unsupported
      return false;
    }
    if ($x_o + $w_o > $w_i) $w_o = $w_i - $x_o; // If width of output image is bigger then input image (considering x_o), reduce it
    if ($y_o + $h_o > $h_i) $h_o = $h_i - $y_o; // If height of output image is bigger then input image (considering y_o), reduce it
    $img_o = imagecreatetruecolor($w_o, $h_o); // Creating descriptor for input image
    imagecopy($img_o, $img_i, 0, 0, $x_o/2, $y_o/2, $w_o, $h_o); // Move part of image from input to output
    $func = 'image'.$ext; // Function that allows to save the result
    return $func($img_o, $image); // Overwrite input image with output on server, return action's result    
}

欢迎您对此提出任何想法或意见。