关于Yii图片处理的一个栗子
来源:互联网 发布:php一句话木马利用 编辑:程序博客网 时间:2024/06/10 09:13
/** * Creates a new model. * If creation is successful, the browser will be redirected to the 'view' page. */public function actionCreate(){$objModel = new WebsiteInformation;// Uncomment the following line if AJAX validation is needed// $this->performAjaxValidation($model);if( isset( $_POST['WebsiteInformation'] ) ) {$objModel->attributes = $_POST['WebsiteInformation'];$objModel->UpdateDate = time();$objModel->CreateDate = time();if ( $objModel->Content ){//识别出Content内容(由于CKedit保存时是data/base64数据流)中的base64数据流图片//将图片base图片还原,保存在服务器中,替换原来的Contentbase64数据流图片为还原的图片所在的路径$xstr = $this->replaceimg( $objModel->Content, null );$objModel->Content = $xstr;}//准备上传缩略图工作$file = CUploadedFile::getInstance( $objModel,'ThumbPic' ); //获得一个CUploadedFile的实例//根据优先级(新上传的缩略图->原来的缩略图->文章中第一张图片->默认图片)获取上传路径$this->getUploadUrl( $objModel, $file );//保存数据并上传图片文件到ThumbUrl文件夹中if( $objModel->save() ){//数据库数据保存成功后再上传图片到指定文件夹中if( is_object( $file ) && get_class( $file ) === 'CUploadedFile' ){$boolUpLoad=$file->saveAs( Yii::app()->basePath. '/../' .$objModel->ThumbPicUrl ); // 上传图片if( !$boolUpLoad ){throw new CHttpException( 502, '数据已保存,但图片上传失败!' );}}$this->redirect( array( 'index' ));}}$this->render('create', array('model' => $objModel,));}
/** * 还原base64数据流图片保存到制定目录中并写入url路径 * @param string $xstr 内容 采集 于 content * @param string $oriweb 网址 一般写null * @return string * */public function replaceimg( $xstr, $oriweb ){$basedir = 'upfile/article/contentpic/'.date('Ymd').'/';//设置目录名(保存路径)if( !is_dir( $basedir ) ){if( !mkdir( $basedir ) ){throw new CHttpException(502,'目录创建失败.');}}//匹配图片的src且只匹配data/base64数据流(目的是只替换base64数据流为图片url路径)preg_match_all( '#<img.*?src="([^"]*)"[^>]*>#i', $xstr, $match );foreach( $match[1] as $imgurl ){if ( substr( $imgurl, 0 , 10) == 'data:image' ){$imgurl = $imgurl;if(is_int(strpos($imgurl, 'http'))){$arcurl = $imgurl;} else {$arcurl = $oriweb.$imgurl;}$img = file_get_contents( $arcurl );if( !empty( $img ) ) {//保存图片到服务器$expData = explode( ';', $arcurl );$postfix = explode( '/', $expData[0] );if( strstr( $postfix[0], 'image' ) )$postfix = $postfix[1] == 'jpeg' ? 'jpg' : $postfix[1];// 获取后缀名$fileimgname = time()."-".rand( 1000, 9999 ).".".$postfix;// 文件名+后缀$filecachs=$basedir."/".$fileimgname;//目录+文件+后缀$fanhuistr = file_put_contents( $filecachs, $img );$saveimgfile = "/".$basedir.$fileimgname;$xstr=str_replace( $imgurl, $saveimgfile, $xstr );}}}//返回替换后的Contentreturn $xstr;}
/** * 根据优先级(新上传的缩略图->原来的缩略图->文章中第一张图片->默认图片)获取上传路径 * @param object $objModel WebsiteInfomation表模型对象 * @param object $file 用url获取的CUploadedFile的实例 * @return string $oldThumbPicUrl 原本保存的缩略图路径 * */public function getUploadUrl( $objModel, $file, $oldThumbPicUrl=null ){$fileDir = 'upfile/article/thumbpic/'.date('Ymd').'/';//设置目录名// 如果上传了缩略图,就使用上传的缩略图if( is_object( $file )&&get_class( $file ) === 'CUploadedFile' ){if( !is_dir( $fileDir ) ){if( !mkdir( $fileDir ) ){throw new CHttpException( 502, '目录创建失败.' );}}$objModel->ThumbPicUrl = '/'.$fileDir.time().'_'.rand( 0, 9999 ).'.'.$file->extensionName; //定义文件保存的目录名称和文件名称// 如果没有上传缩略图,就使用文章中的第一张图片作为缩略图}else{preg_match ( "<img.*src=[\"](.*?)[\"].*?>", $objModel->Content, $match );// 文章中有图片,并且没有选择上传(新的)图片,则使用文章内容的第一张图片if ( !empty( $match ) && empty( $oldThumbPicUrl ) ){$objModel->ThumbPicUrl = $match[1];//如果文章中也没有图片,则使用默认的图片}else{if ( !$oldThumbPicUrl )//当没有上传新的缩略图且文章中没有图片,原来的图片没有被更改掉,则不应该替换成默认图片$objModel->ThumbPicUrl = '/upfile/article/thumbpic/noPic.jpg';}}}
0 0
- 关于Yii图片处理的一个栗子
- 一个关于图片处理的代码
- YII 上传一个图片
- 求教一个android的关于图片处理的问题?
- 关于图片的处理
- Nodejs可以替换php的一个栗子
- Java_log2000_一个有趣的重载函数栗子
- mysql触发器的一个小栗子
- lower_bound(一个不怎么好的栗子)
- 一个线程死锁的小栗子
- 关于java反射的一些小栗子
- Yii上传文件(头像)的一个例子(后端处理)
- YII的异常处理
- yii事务的处理
- 关于图片处理的文章
- 关于Android的图片处理
- 关于图片的模糊处理
- 关于yii的relations
- C语言链表实例讲解
- Objective-C和Swift中常用的第三方库都可以在这个平台看到
- iOS 使用cocoapods遇见头文件找不到
- java中volatile关键字的含义
- [转]浏览器的工作原理:新式网络浏览器幕后揭秘
- 关于Yii图片处理的一个栗子
- DFS(深度优先搜索)___BFS(广度优先搜索)过程图解
- 利用SecureCRT上传、下载文件(使用sz与rz命令),超实用!
- 欢迎使用CSDN-markdown编辑器
- Linux关机命令详解
- python多线程编程(2): 线程的创建、启动、挂起和退出
- weblogic 12c 启动报错
- 南邮 OJ 1174 G小K的情书
- 矩阵的计算