3.2图片保存含中文乱码问题

浏览:716 发布日期:2019/03/08 分类:功能实现 关键字: Tinkphp3.2 Image() 中文乱码
图片上传后压缩保存,保存名字含有中文,实际图片名称乱码
首先是一个很好用的js插件,可以用ajax上传图片,插件在上传附件中,js代码如下//#login-form是formID,popupWin是提示框
$("#login-form").ajaxSubmit({
                url:"__APP__/Index/eidtEnroll",
                type:'post',
                success:function(json){
                    //console.log(json);
                    json=eval('('+json+')');
                    if(json.imgstate=='fail'){
                        popupWin(json.msg+'图片上传失败');
                    }else{
                        popupWin(json.msg);
                    }
                    if(json.error=='ok'){
                        setTimeout(function(){window.location.href="__APP__/Index/index.html?id="+json.data.id},1500);
                    }
                }
            });
然后是php处理图片的代码:if($_FILES){//图片上传处理
                //var_dump($_POST);exit;
                $upload=new \Think\Upload();
                $upload->mimes=array("image/jpeg","image/png","image/gif");
                $upload->maxSize=5000000;
                $upload->autoSub=false;
                $upload->rootPath="./public/upload/enroll/";
                $re=$upload->upload($_FILES);
                if($re){
                    $image = new \Think\Image();
                    //var_dump($re);exit;
                    foreach($re as $k=>$v){
//如果上传多张图片,$k 为数字,只有一张$k为input的name名字
                        $img='./public/upload/enroll/'.$v['savename'];
//$data['list_student']是汉字,
//上传的图片保存在enroll文件夹中,处理后保存在enroll/mini中,并删除原图片
                        $newname='mini/'.$data['list_student'].'+'.$data['list_card'].'.jpg';
                        $newimg='./public/upload/enroll/'.$newname;
                        $image->open($img);
//IMAGE_THUMB_FIXED 固定长宽
                        $image->thumb(96, 136,\Think\Image::IMAGE_THUMB_FIXED)->save($newimg);
//删除原图片
                        @unlink("./public/upload/enroll/{$v['savename']}");
                        $data['list_img']=$newname;
                    }
                }else{
                    $return['imgstate']='fail';
                }
            }else{
                $return['imgstate']='no';
            }
上传后,数据库保存的正常,但是实际图片名字乱码,百度一下后,找到一个解决方法:
上传文件乱码问题:在ThinkPHP\Library\Think\Upload\Driver\Local.class.php中修改:// if (!move_uploaded_file($file['tmp_name'], $filename)) {
        if (!move_uploaded_file($file['tmp_name'], iconv('utf-8','gb2312',$filename))){ 
            $this->error = '文件上传保存错误!';
            return false;
        }
而我是图片保存问题:ThinkPHP\Library\Think\Image\Driver\Gd.class.php,Image()方法,它引入了Gd.class.php,所以到该文件中找,修改后://保存图像
        if('gif' == $type && !empty($this->gif)){
           // $this->gif->save($imgname);
            $this->gif->save(iconv('utf-8','gb2312',$imgname));
        } else {
            $fun = "image{$type}";
            //$fun($this->img, $imgname);
            $fun($this->img, iconv('utf-8','gb2312',$imgname));
        }
原理应该是保存图片编码由utf-8转变为gb2312,然后试了可以

附件 jquery.form.zip ( 11.77 KB 下载:2 次 )

评论( 相关
后面还有条评论,点击查看>>