Php图像重采样维度问题

时间:2017-07-17 13:59:45

标签: php image-processing dimensions

请使用下面的php图像功能在上传时或在页面上显示图像时调整图像大小,但我发现当我尝试调整原始图像的大小时它不会给我我想要的实际尺寸

示例:原始图片宽度为600,高度为400 我打算将其调整为180 X 180,但它为我提供了宽度180和高度120。请问我不知道问题是什么,任何人都可以帮忙吗?

<?php
function CroppedThumbnail($imagename, $meta, $newpath, $imgwidth, $imgheight, $rename, $imgQuality){
// Set a maximum height and width
    $width = $imgwidth;
    $height = $imgheight;
    $url = '';
//Get image info

    $info = @getimagesize($imagename);
    $fileparts = pathinfo($imagename);
// Get new dimensions
    $imageAvatar =  substr($fileparts['filename'],0,5) . '-' . $imgwidth . 'x' . $imgheight . '.png';
    if(is_dir($newpath . '/') && file_exists($newpath . '/' . $imageAvatar)){
       return $url . $newpath . '/' . $imageAvatar;
    }else{      
    list($width_orig, $height_orig) = $info;
    $ratio_orig = $width_orig/$height_orig;
    if ($width/$height > $ratio_orig) {
        $width = $height*$ratio_orig;
    } else {
        $height = $width/$ratio_orig;
    }
// Resample
    if ($info['mime'] == 'image/jpeg'){
        $image = imagecreatefromjpeg($url.$imagename);
    }
    else if ($info['mime'] == 'image/gif'){
        $image = imagecreatefromgif($url.$imagename);
    }
    else if ($info['mime'] == 'image/png'){
        $image = imagecreatefrompng($url.$imagename);
    }
    $image_p = imagecreatetruecolor($width, $height);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
//Rename the image
    if($rename == true){
        $newName = substr($fileparts['filename'],0,5) . '-' . $imgwidth . 'x' . $imgheight;
        $newFileName = $newpath . '/' . $newName . '.png';
    }else{
        $newFileName = $newpath . '/' . $imagename;
    }
// Output
    imagejpeg($image_p, $newFileName, $imgQuality);
    return $url . $newFileName;
    }
}

1 个答案:

答案 0 :(得分:0)

这是因为您保持图像的原始宽高比。

这是在以下代码行中:

$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
    $width = $height*$ratio_orig;
} else {
    $height = $width/$ratio_orig;
}

如果您不想保留纵横比,只需删除这些行。