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

    选择打赏方式

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

需求如上,源码如下:

/**
 * 重置图片文件大小
 * @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 裁剪保留原透明度、大小不变函数分享
本文链接:https://www.nswin.cn/phptm.html
版权声明:若无特殊注明,本文为《 LOVE 》原创,转载请保留文章出处。
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框
可使用QQ号实时获取昵称+头像

私密评论

吃奶的力气提交吐槽中...


既然没有吐槽,那就赶紧抢沙发吧!