线报网 / PHP教程 / PHP 裁剪保留原透明度、大小不变函数分享

PHP 裁剪保留原透明度、大小不变函数分享

【摘要】 为了完成图片上传之后自动的裁剪,然后在前台显示出裁剪出的图片。 需求如上,源码如下: /** * 重置图片文件大小 * @param stri......

为了完成图片上传之后自动的裁剪,然后在前台显示出裁剪出的图片。

需求如上,源码如下:


/**
 * 重置图片文件大小
 * @param  string $filePath 文件路径
 * @param  int $xmax     最大宽度
 * @param  int $ymax     最大高度
 * @return boolean       true/false
 */
ResetImageFileSize('C:\Users\Administrator\Desktop\isiyuan.png',100,100);

function ResetImageFileSize($filePath, $xmax, $ymax)
{
    if(filesize($filePath) == 0) return 'error_file';
    //$extension = pathinfo($filePath)['extension'];
    $extension = explode('/',getimagesize($filePath)['mime'])[1];

    $img  = null;
    switch ($extension) {
        case 'jpg':
        case 'jpeg':
            $img = imagecreatefromjpeg($filePath);
            break;
        case 'png':
            $img = imagecreatefrompng($filePath);
            break;
        case 'gif':
            $img = imagecreatefromgif($filePath);
            break;
        case 'webp':
            $img = imagecreatefromwebp($filePath);
            break;
    }

    if(is_null($img)) return false;

    list($x,$y)  = getimagesize($filePath);

    if($x <= $xmax && $y <= $ymax){
        return true;
    }
    /*保留原宽高比率*/
    if($x >= $y) {
        $newX = ($x > $xmax) ? $xmax : $x;
        $newY = $newX * ($y / $x);
    }else{
        $newY = ($y > $ymax) ? $ymax : $y;
        $newX = ($x / $y) * $newY;
    }

    $img2 = imagecreatetruecolor($newX, $newY);
    imageantialias($img2,true);//使用抗锯齿,思源网
    if($extension == 'png'){
    $Color = imagecolorallocatealpha($img2, 0, 0, 0, 127);//设置透明
    }else{
        $Color = imagecolorallocate($img2,255,255,255);
    }
    imagecolortransparent($img2,$Color);
    imagefill($img2,0,0,$Color);

    if(function_exists('imagecopyresampled')){
        /*生成图像质量较好,但速度相比较慢*/
        imagecopyresampled($img2, $img, 0, 0, 0, 0, floor($newX), floor($newY), $x, $y);
    }else{
        /*生成图像质量较差,但速度相比较快*/
        imagecopyresized($img2, $img, 0, 0, 0, 0, floor($newX), floor($newY), $x, $y);
    }

    switch ($extension) {
        case 'jpg':
        case 'jpeg':
            imagejpeg($img2,$filePath,100);
            break;
        case 'png':
            imagesavealpha($img2,true);
            imagepng($img2,$filePath);
            //imagepng($img2,$filePath,9);
            break;
        case 'gif':
            imagegif($img2,$filePath);
            break;
        default:
            imagejpeg($img2,$filePath,100);
            break;
    }

    imagedestroy($img2);
    return true;
}


本文标签:
版权声明:《 PHP 裁剪保留原透明度、大小不变函数分享 》为作者 思源哥哥原创文章,转载请注明原文地址!
免责声明:思源资源网提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件(y#isiyuan.net)与我们联系处理。
本文地址:https://www.isiyuan.net/phpjc/11214.html
分享到:
打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

评论 (1)
  • 思源资源网
    金毛囊植发

    感谢作者分享学习了,希望作者以后再接再厉,写出更好的文章 (过滤)