fastadmin 后台上传图片并压缩

17 篇文章 2 订阅

1.打开/application/admin/controller/Ajax.php文件
2.找到\think\Hook::listen(“upload_after”, $attachment);并在代码下方添加如下代码:

if (in_array($fileInfo['type'], ['image/gif', 'image/jpg', 'image/jpeg', 'image/bmp', 'image/png', 'image/webp']) || in_array($suffix, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'webp'])) {
                $max_size = 1024*1024*2;
                if($fileInfo['size']>$max_size){
                    
                    $required_memory = $imgInfo[0] * $imgInfo[1] * $imgInfo['bits'];
                    $new_limit=memory_get_usage() + $required_memory+200000000;
                    ini_set("memory_limit", $new_limit);
                    
                    if($fileInfo['type']=='image/jpg'||$fileInfo['type']=='jpg' || $fileInfo['type']=='image/jpeg' || $fileInfo['type']=='jpeg'){
                        $image = ROOT_PATH . '/public' . $uploadDir . $fileName;
                        $src = @imagecreatefromjpeg($image);
                        $newwidth = isset($imgInfo[0]) ? $imgInfo[0] : $imagewidth;   //宽高可以设置,
                        $newheight = isset($imgInfo[1]) ? $imgInfo[1] : $imageheight;
                        $newwidth = $newwidth/2;
                        $newheight = $newheight/2;
                        $tmp = imagecreatetruecolor($newwidth,$newheight); //生成新的宽高
                        imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $imagewidth, $imageheight); //缩放图像
                        $output = imagejpeg($tmp, $image, 10); //第三个参数(0~100);越大越清晰,图片大小也高;   png格式的为(1~9)
                        // ini_restore ("memory_limit");
                    }
                    
                    if($fileInfo['type']=='image/png'||$fileInfo['type']=='png'){
                         $image = ROOT_PATH . '/public' . $uploadDir . $fileName;
                         $src = @imagecreatefrompng($image);
                         $newwidth = isset($imgInfo[0]) ? $imgInfo[0] : $imagewidth;   
                         $newheight = isset($imgInfo[1]) ? $imgInfo[1] : $imageheight;
                         $newwidth = $newwidth/2;
                         $newheight = $newheight/2;
                         $tmp = imagecreatetruecolor($newwidth,$newheight);
                         imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $imagewidth, $imageheight);
                         $output = imagepng($tmp, $image, 1);  //这个图片的第三参数(1~9)
                        //  ini_restore ("memory_limit");
                    }
                    
                }
            }

代码解析:
首先判断 上传文件是否为图片类型 ,然后对图片大小进行判断, 超过一定大小后进行图片压缩,ini_set(“memory_limit”, $new_limit);是自动设置服务器分配给php程序所需要的内存大小,因为在执行png格式大图片imagecreatefrompng 时会造成内存溢出,ini_restore (“memory_limit”);是为了在执行压缩后恢复服务器的设置

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值