加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Yii框架实现图片上传的方法详解

发布时间:2021-01-17 22:35:01 所属栏目:PHP教程 来源:网络整理
导读:本篇章节讲解Yii框架实现图片上传的方法。供大家参考研究具体如下: 今天在网上看了下有关图片上传的教程,历经挫折才调试好,现在把相关代码及其说明贴出来,以供初次使用的朋友们参考。 Model: 'jpg,gif,png') ); }} 注:resource为数据表,表

本篇章节讲解Yii框架实现图片上传的方法。分享给大家供大家参考,具体如下:

今天在网上看了下有关图片上传的教程,历经挫折才调试好,现在把相关代码及其说明贴出来,以供初次使用的朋友们参考。

Model:

'jpg,gif,png') ); } }

注:resource为数据表,表前缀可在main.php内设置,相信朋友们在看到文件上传时应该熟悉了main.php位置在哪及运作机制。

Controller:

image=CUploadedFile::getInstance($model,'image'); $ext = $model->image->getExtensionName(); $fileName = uniqid() . '.' . $ext; $model->image->saveAs('assets/' . $fileName); } $this->renderPartial('index',array('model'=>$model)); } }

注:saveAs里面是存放图片上传后的地址,追踪下代码可以发现,该参数是move_uploaded_file函数的第二个参数,一定得是文件名。

View:

'multipart/form-data')); ?>

注:上面的SITE_URL为项目定义的常量,也就是项目的网址

相信经过上述步骤,朋友们应该可以上传成功图片,而且在项目下的assets目录下找到上传的图片。因为发现yii没有缩略图的方法,于是把thinkphp缩略图的方法整合了进来,把下面代码保存为Image.php放在项目下的protected/extensions目录下

$imageInfo[0],"height" => $imageInfo[1],"type" => $imageType,"size" => $imageSize,"mime" => $imageInfo['mime'] ); return $info; } else { return false; } } /** +---------------------------------------------------------- * 生成缩略图 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $image 原图 * @param string $type 图像格式 * @param string $thumbname 缩略图文件名 * @param string $maxWidth 宽度 * @param string $maxHeight 高度 * @param string $position 缩略图保存目录 * @param boolean $interlace 启用隔行扫描 +---------------------------------------------------------- * @return void +---------------------------------------------------------- */ static function thumb($image,$thumbname,$type='',$maxWidth=200,$maxHeight=50,$interlace=true) { // 获取原图信息 $info = Image::getImageInfo($image); if ($info !== false) { $srcWidth = $info['width']; $srcHeight = $info['height']; $type = empty($type) ? $info['type'] : $type; $type = strtolower($type); $interlace = $interlace ? 1 : 0; unset($info); $scale = min($maxWidth / $srcWidth,$maxHeight / $srcHeight); // 计算缩放比例 if ($scale >= 1) { // 超过原图大小不再缩略 $width = $srcWidth; $height = $srcHeight; } else { // 缩略图尺寸 $width = (int) ($srcWidth * $scale); $height = (int) ($srcHeight * $scale); } // 载入原图 $createFun = 'ImageCreateFrom' . ($type == 'jpg' ? 'jpeg' : $type); if(!function_exists($createFun)) { return false; } $srcImg = $createFun($image); //创建缩略图 if ($type != 'gif' && function_exists('imagecreatetruecolor')) $thumbImg = imagecreatetruecolor($width,$height); else $thumbImg = imagecreate($width,$height); //png和gif的透明处理 by luofei614 if('png'==$type){ imagealphablending($thumbImg,false);//取消默认的混色模式(为解决阴影为绿色的问题) imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息(为解决阴影为绿色的问题) }elseif('gif'==$type){ $trnprt_indx = imagecolortransparent($srcImg); if ($trnprt_indx >= 0) { //its transparent $trnprt_color = imagecolorsforindex($srcImg,$trnprt_indx); $trnprt_indx = imagecolorallocate($thumbImg,$trnprt_color['red'],$trnprt_color['green'],$trnprt_color['blue']); imagefill($thumbImg,$trnprt_indx); imagecolortransparent($thumbImg,$trnprt_indx); } } // 复制图片 if (function_exists("ImageCopyResampled")) imagecopyresampled($thumbImg,$srcImg,$width,$height,$srcWidth,$srcHeight); else imagecopyresized($thumbImg,$srcHeight); // 对jpeg图形设置隔行扫描 if ('jpg' == $type || 'jpeg' == $type) imageinterlace($thumbImg,$interlace); // 生成图片 $imageFun = 'image' . ($type == 'jpg' ? 'jpeg' : $type); $imageFun($thumbImg,$thumbname); imagedestroy($thumbImg); imagedestroy($srcImg); return $thumbname; } return false; } } ?>

再在项目下的protected/config/main.php中import字段加上

array( 'application.models.*','application.components.*','application.extensions.*',#加上此行,意思为自动载入 ),

再上面的Controller加上

image=CUploadedFile::getInstance($model,'image'); $ext = $model->image->getExtensionName(); $fileName = uniqid() . '.' . $ext; $model->image->saveAs('assets/' . $fileName); // 生成缩略图 Image::thumb('assets/' . $fileName,'assets/' . uniqid() . '.' . $ext); } $this->renderPartial('index',array('model'=>$model)); }

这次就完整了。

更多关于Yii相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读