如何在不丢失任何上传图像部分的情况下裁剪图像?

时间:2016-04-12 08:33:50

标签: php

好吧,在我的网站中,我正在尝试使用以下php函数裁剪图像:

function image_resize($target, $newcopy, $w, $h, $ext) {
    list($w_orig, $h_orig) = getimagesize($target);
    $scale_ratio = $w_orig / $h_orig;
    if (($w / $h) > $scale_ratio) {
           $w = $h * $scale_ratio;
    } else {
           $h = $w / $scale_ratio;
    }
    $img = "";
    $ext = strtolower($ext);
    if ($ext == "gif"){ 
    $img = imagecreatefromgif($target);
    } else if($ext =="png"){ 
    $img = imagecreatefrompng($target);
    } else { 
    $img = imagecreatefromjpeg($target);
    }
    $tci = imagecreatetruecolor($w, $h);
    $backgroundColor = imagecolorallocate($tci, 255, 255, 255);    
    imagefill($tci, 0, 0, $backgroundColor);
    // imagecopyresampled(dst_img, src_img, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h)
    imagecopyresampled($tci, $img, 0, 0, 0, 0, $w, $h, $w_orig, $h_orig);
    if ($ext == "gif"){ 
        imagegif($tci, $newcopy);
    } else if($ext =="png"){ 
        imagepng($tci, $newcopy);
    } else { 
        imagejpeg($tci, $newcopy, 84);
    }
}

但它不能正常工作。

例如:我的图片大小为:720 x 478。当我使用此函数调整大小(我可以在函数调用中设置宽度和高度)时,它会根据宽度裁剪图像。对于例如我这样称呼它:

image_resize($file_destination, "../users_avator/ppic_$file_new_name", 200, 200, $file_ext);

它保存了200 x 132尺寸的图像。 但我不想要

我想要将图像裁剪为200 x 200尺寸,但不剪切图像的任何部分。喜欢:

我看到一个名为cozymeal.com的网站当我在配置文件部分上传相同图像时,其大小为720 x 478,它会将图像大小神奇地裁剪为200 x 200 ,而不会剪切图像的任何部分< / strong>即可。

原始图片:

enter image description here

我的裁剪结果:

enter image description here

Cozymeal cropping结果:

enter image description here

我的问题是如何修复我的功能/裁剪任何图像,例如这个cozymeal.com裁剪系统?我的意思是自定义大小而不会丢失任何图像部分。

1 个答案:

答案 0 :(得分:1)

有趣的是,我实际上在Cozymeal工作。我们使用CDN cloudinary获得此功能,但如果您想要根据需要裁剪图像,可以使用此库:https://github.com/avalanche123/Imagine

所有文档都在插件

如果您对此库感到不舒服,可以使用以下方法之一:https://github.com/ziadoz/awesome-php#imagery

祝你好运:)