编辑器上传图片至七牛,处理(裁剪,缩放)图片后上传,不落地
来源:互联网 发布:淘宝客自动采集漏洞 编辑:程序博客网 时间:2024/04/30 11:06
很多网站系统为了节省自身服务器空间,会将资源文件存储在第三方,这样很方面,只是存储空间需要收费的,如果用户上传过大图片会占用很多空间,然后显示也不需要调用原文件。
最近遇到一个关于这方面的问题,公司要求像素大于1000*1000的图片要进行裁剪,然后上传到七牛,像素超过1000的要裁剪为1000的,小于1000的直接上传原图。
看过七牛的文档,虽然有对大图片进行高级处理的v2版的说明,但是这些处理都是已经存储在七牛上的了。
看sdk中src/Qiniu/Storage/UploadManager.php中有put和putFile两个上传文件的方法,前者是上传二进制流,后者是上传文件(原理也是转成二进制)。
putFile:思路大概是降图片做完裁剪然后存放自身服务器上,然后将裁剪后的图片地址路径上传,上传成功后再将自身服务器上的资源删掉。我没有用这个方法,总觉得落地数据处理不舒服。
put:思路是将图片裁剪之后,将裁剪后的图片生成二进制流存放在缓存中,然后将缓存中的二进制调用put上传。
最近遇到一个关于这方面的问题,公司要求像素大于1000*1000的图片要进行裁剪,然后上传到七牛,像素超过1000的要裁剪为1000的,小于1000的直接上传原图。
看过七牛的文档,虽然有对大图片进行高级处理的v2版的说明,但是这些处理都是已经存储在七牛上的了。
看sdk中src/Qiniu/Storage/UploadManager.php中有put和putFile两个上传文件的方法,前者是上传二进制流,后者是上传文件(原理也是转成二进制)。
putFile:思路大概是降图片做完裁剪然后存放自身服务器上,然后将裁剪后的图片地址路径上传,上传成功后再将自身服务器上的资源删掉。我没有用这个方法,总觉得落地数据处理不舒服。
put:思路是将图片裁剪之后,将裁剪后的图片生成二进制流存放在缓存中,然后将缓存中的二进制调用put上传。
Talk is cheap. Show you the code。
裁剪图片,并返回裁剪后的图片二进制
/** * 上传图片处理 原图像素大于1000*1000的处理 * $maxwidth = 1000 * $maxheight = 1000 */function resizeImage($im,$maxwidth=1000,$maxheight=1000){$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);}//不写入服务ob_start(); //开启缓存imagejpeg($newim);$erjinzhi = ob_get_clean(); //获取二进制return $erjinzhi; //返回二进制}else{ //像素没超过规定范围,返回原图二进制ob_start();imagejpeg($im);$erjinzhi = ob_get_clean();return $erjinzhi;}}以下是调用七牛sdk上传二进制至服务器
$imageresource = 'J:\wamp\tmp\php8D3.tmp' ;//上传图片的临时文件或本地图片路径$imgFile = $this->resizeImage($imageresource);//像素大于1000*1000的前期处理后上传// 上传到七牛后保存的文件名$time = md5(microtime().rand(1000,9999));$name = substr($time, 0, 2) .'/'. substr($time, 2, 2) .'/'. $time;$key = 'bbs/'.$name.'.jpg'; //上传后的文件命名// 初始化 UploadManager 对象并进行文件的上传$uploadMgr = new UploadManager();// 调用 UploadManager 的 put 方法进行文件的上传list($ret, $err) = $uploadMgr->put($token, $key, $imgFile);
以上是jpg静态图的上传方式,可根据传图属性分别使用imagejpeg() imagebmp() imagepng()不同方法。
如果gif上传也用以上方法的话,gif被裁剪后的结果只会保留gif的第一帧,也就是说裁剪后的gif是不会动的静态图,gif上传可直接使用七牛的UploadManager的putFile()直接上传。跳过裁剪过程。
阅读全文
0 0
- 编辑器上传图片至七牛,处理(裁剪,缩放)图片后上传,不落地
- 图片上传裁剪&等比缩放处理(html5+Canvas)
- java对上传图片缩放裁剪
- 对上传的图片进行裁剪处理后保存
- 上传图片的缩放处理
- 上传图片的缩放处理
- 上传图片的缩放处理
- java读取图片处理实现缩放裁剪,用于个人信息中上传图片自定义头像大小
- (图片)jsp上传图片,进行缩放处理
- 图片裁剪上传
- 图片裁剪预览上传
- 图片裁剪上传
- 图片上传前预处理,等比缩放、裁剪 (html5 + canvas)
- ZT 上传图片的缩放处理
- php对上传图片进行缩放处理
- JAVA上传图片的缩放处理
- Struts2 图片上传、缩放、剪切处理 第一节
- 图片等比缩放上传
- matplotlib绘图实例:pyplot、pylab模块及作图参数
- Activity的四种启动模式和应用场景
- linux怎么查询台账信息
- 门控时钟
- 这是一篇一本正经的博主介绍
- 编辑器上传图片至七牛,处理(裁剪,缩放)图片后上传,不落地
- PooledByteBuf内存池
- ANSYS公开课圆满落幕
- jenkins部署maven项目构建后部署前执行shell脚本
- Unity3D 多种播放音效的方式
- Exif Info 隐私政策
- 数据结构平衡树汇总(AVL 红黑树 Treap B树 B+树 2-3 2-4)
- 自定义IOS系统弹框
- SVN更新时每个字母代表的含义