• php 图片上传的公共方法(按图片宽高缩放或原图)


    写的用于图片上传的公共方法
    类调用方法:
    $upload_name='pic';
    $type = 'logo_val';
    $file_name = 'logo_' . $user_id .create_strcode(5). '.jpg'; //保存文件名
    $savepath = "/uploads/user_logo/"; //上传文件的存放路径
    $img_width=$img_height='100';
    $result=upload_images_core($_FILES,$upload_name,$file_name,$savepath,$img_width,$img_height);



    /*
    * 图片上传核心处理方法(按图片宽高缩放)
    * @param $file_arr array 图片上传$_FILES获取的数组
    * @param $upload_name 页面file控件name值
    * @param $img_name 图片名称(含后缀)
    * @param savepath 新图片保存目录
    * @param maxwidth 新图片最大宽度
    * @param maxwidth 新图片最大高度
    * @author xufeng 837274769@qq.com
    * */
    function upload_images_core($file_arr,$upload_name,$file_name,$savepath,$maxwidth=100,$maxheight=100){
    if(empty($file_arr) || empty($upload_name)){//当接收文件为空或控件名称为空时,直接返回错误
    return array('state'=>RESULT_FAILURE,'msg'=>'不知名错误');
    }else{
    $file_arr=$file_arr[$upload_name];
    }
    $type = strtolower(substr($file_arr['name'],strrpos($file_arr['name'],'.')+1)); //得到文件类型,并且都转化成小写
    $allow_type = array('jpg','jpeg','gif','png'); //允许上传的类型
    $maxsize = 2048000; //最大限制 2M
    $base_path = APPPATH . '../htdocs';
    $img_path=$base_path.$savepath.$file_name;
    //检测是否是正常HTTP POST上传的
    if(!is_uploaded_file($file_arr['tmp_name'])){
    return array('state'=>RESULT_FAILURE,'msg'=>'非法来源文件');
    }
    /** 检查目录是否可写 */
    if (!@is_writable($base_path.$savepath)) {
    return array('state'=>RESULT_FAILURE,'msg'=>'目录不可写');
    }
    /*检查文件是否超过限制*/
    if ($maxsize!= 0) {
    if ($file_arr['size'] > $maxsize) {
    return array('state'=>RESULT_FAILURE,'msg'=>'文件太大');
    }
    }
    if(!in_array($type, $allow_type)){
    return array('state'=>RESULT_FAILURE,'msg'=>'不允许该格式文件');
    }
    if(move_uploaded_file($file_arr['tmp_name'],$img_path)){
    switch($type){
    case 'jpg': $im=imagecreatefromjpeg($img_path);
    break;
    case 'jpeg': $im=imagecreatefromjpeg($img_path);
    break;
    case 'gif': $im=imagecreatefromgif($img_path);
    break;
    case 'png': $im=imagecreatefrompng($img_path);
    break;
    default: return array('state'=>RESULT_FAILURE,'msg'=>'不允许该格式文件');
    }
    $pic_width = imagesx($im);
    $pic_height = imagesy($im);
    if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight))
    {
    if($maxwidth && $pic_width>$maxwidth) //原图宽度大于最大宽度
    {
    $widthratio = $maxwidth/$pic_width;
    $resizewidth_tag = true;
    }

    if($maxheight && $pic_height>$maxheight) //原图高度度大于最大高度
    {
    $heightratio = $maxheight/$pic_height;
    $resizeheight_tag = true;
    }

    if($resizewidth_tag && $resizeheight_tag) //如果新图片的宽度和高度都比原图小
    {
    if($widthratio<$heightratio) //那个比较小就说明它的长度要长,就取哪条,以长边为准缩放保证图片不被压缩
    $ratio = $widthratio;
    else
    $ratio = $heightratio;
    }

    if($resizewidth_tag && !$resizeheight_tag)
    $ratio = $widthratio;
    if($resizeheight_tag && !$resizewidth_tag)
    $ratio = $heightratio;

    $newwidth = $pic_width * $ratio; //原图的宽度*要缩放的比例
    $newheight = $pic_height * $ratio; //原图高度*要缩放的比例

    if(function_exists("imagecopyresampled"))
    {
    $newim = imagecreatetruecolor($newwidth,$newheight); //生成一张要生成的黑色背景图 ,比例为计算出来的新图片比例
    imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height); //复制按比例缩放的原图到 ,新的黑色背景中。
    }
    else
    {
    $newim = imagecreate($newwidth,$newheight);
    imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
    }
    @imagejpeg($newim,$img_path);
    @imagedestroy($newim);
    }
    else
    {
    @imagejpeg($im,$img_path);
    }
    return array('state'=>RESULT_SUCCESS,'msg'=>$savepath.$file_name);
    }else{
    return array('state'=>RESULT_FAILURE,'msg'=>'不知名错误');
    }
    }
  • 相关阅读:
    凤凰架构-读书笔记
    《团队协作的五大障碍》笔记
    MongoDB基本操作命令一
    NBI可视化集成clickhouse,实现百亿级数据分析能力
    AI文本与图像数据集荟萃
    gitLab内网部署
    git管理子模块
    git基础使用
    linux内核数据结构之链表-再实现
    win10下安装linux子系统
  • 原文地址:https://www.cnblogs.com/xiamibk/p/5833304.html
Copyright © 2020-2023  润新知