php 上传图片 裁剪,thinkphp_图片上传裁剪功能_已迁移
准备材料
THINKPHP
jQuery表单插件
cropper 裁剪插件
思路: 利用THINKPHP上传文件类与图片裁剪类,前台想办法组合参数给后台 那怎么样可以异步提交文件呢 关键就是 jquery表单插件了
后台准备
前台准备
即时预览图片 (不会上传文件)
/**
* 从 file 域获取 本地图片 url
*/
function getFileUrl(sourceId) {
var url;
if (navigator.userAgent.indexOf("MSIE")>=1) { // IE
url = document.getElementById(sourceId).value;
} else if(navigator.userAgent.indexOf("Firefox")>0) { // Firefox
url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));
} else if(navigator.userAgent.indexOf("Chrome")>0) { // Chrome
url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));
}
return url;
}
/**
* 将本地图片 显示到浏览器上
*/
function preImg(sourceId, targetId) {
var url = getFileUrl(sourceId);
var imgPre = document.getElementById(targetId);
imgPre.src = url;
}
//触发事件调用
preImg(this.id,'imgPre');
我的实现代码
前端
上传新头像
选择文件
未选择文件
支持格式:jpg、jpeg、png、gif格式,大小不超过5M
温馨提示:
禁止上传违反中华人民共和国相关法律的照片,若上传,相关
法律后果有个人承担
//头像上传裁剪 start
$(function(){
//打开或关闭弹出层
$(document).ready(function() {
$('.toux').click(function(){
$('.txsc').fadeIn(300);
})
$('.txsc .close').click(function(){
$('.txsc'). fadeOut(300);
})
});
/**
* 从 file 域获取 本地图片 url
*/
function getFileUrl(sourceId) {
var url;
if (navigator.userAgent.indexOf("MSIE")>=1) { // IE
url = document.getElementById(sourceId).value;
} else if(navigator.userAgent.indexOf("Firefox")>0) { // Firefox
url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));
} else if(navigator.userAgent.indexOf("Chrome")>0) { // Chrome
url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));
}
return url;
}
/**
* 将本地图片 显示到浏览器上
*/
function preImg(sourceId, targetId) {
var url = getFileUrl(sourceId);
var imgPre = document.getElementById(targetId);
imgPre.src = url;
}
//先清除原来的图片
$("#imgOne").click(function(){
$('.avatar_img').html('');
})
//点击重新上传相当于点击了上传文件
$("#resetUplode").click(function(){
$("#imgOne").click();
})
$("#imgOne").live('change',function(){
preImg(this.id,'imgPre');
//图片裁剪初始化
$('.container > img').cropper({
aspectRatio: 16 / 9,
rotateControls:true,
zoomable: true,
crop: function(data) {
//$('.avatar-data').
var x = data.x;
var y = data.y;
var width = data.width;
var height = data.height;
var avatarData = '{"x":'+x+',"y":'+y+',"height":'+height+',"width":'+width+',"rotate":0}';
$('.avatar-data').val(avatarData);
}
});
});
//放大
$("#enlarge").click(function(){
$('.container > img').cropper('zoom', +0.1);
})
//缩小
$("#shrink").click(function(){
$('.container > img').cropper('zoom', -0.1);
})
/* 异步上传图片 */
$("#avatar_sumbit").click(function(){
$('#avatar_form').ajaxSubmit(function(data){
//console.log(data);
//替换当前图片的路径
$(".toux").attr('src',data.crop_path);
//接收图片ID后,放到当前页面中
$("input[name='head_img']").val(data.pic_id);
//关闭当前弹出层
$('.txsc'). fadeOut(300);
});
return false;
});
});
//头像上传裁剪 end
PHP端
控制器中的方法
public function ajaxAvatar(){
$avatarArr = json_decode(I('post.avatar_data'),1);
$picModel = D('picture');
$info = $picModel->ajaxUpload($_FILES,$avatarArr);
$this->ajaxReturn($info);
}
图片model层代码
/**
* 图片上传
* @param array $files 要上传的图片列表(通常是$_FILES数组)
* @param array $setting 图片上传配置
* @param string $driver 图片驱动名称
* @param array $config 图片驱动配置
* @return array 图片上传成功后的信息
*/
public function upload($files, $setting, $driver = 'Local', $config = null){
/* 上传文件 */
$Upload = new \Think\Upload($setting, $driver, $config);
$info = $Upload->upload($files);
/* 设置文件保存位置 */
$this->_auto[] = array('location', 'Ftp' === $driver ? 1 : 0, self::MODEL_INSERT);
if($info){ //文件上传成功,记录文件信息
foreach ($info as $key => &$value) {
/* 已经存在文件记录 */
if(isset($value['id']) && is_numeric($value['id'])){
$value['path'] = substr($setting['rootPath'], 1).$value['savepath'].$value['savename'];//在模板里的url路径
continue;
}
$value['path'] = '.'.substr($setting['rootPath'], 1).$value['savepath'].$value['savename'];//在模板里的url路径
/* 记录文件信息 */
if($this->create($value) && ($id = $this->add())){
$value['id'] = $id;
} else {
//TODO: 文件上传成功,但是记录文件信息失败,需记录日志
unset($info[$key]);
}
}
return $info; //文件上传成功
} else {
$this->error = $Upload->getError();
return false;
}
}
/*更新或添加*/
public function update($data)
{
$data = $this->create($data);
if(!$data){ return false;}
return empty($data['id']) ? $this->add() : $this->save();
}
/**
*异步上传并裁剪图片
* @param $file $_FILES 文件信息
* @param $pic 要裁剪信息
* @param $pre 裁剪后图片前缀
* @return array 图片裁剪之后的地址 原图片地址 图片ID
*/
public function ajaxUpload($file,$picArr,$pre='crop'){
$config = array(
'maxSize' => 3145728,
'rootPath' => './Uploads/Picture/',
'savePath' => '',
'saveName' => array('uniqid',''),
'exts' => array('jpg', 'gif', 'png', 'jpeg'),
'autoSub' => true,
'subName' => array('date','Y-m-d'),
);
//可以直接调用系统的上传类
$info = $this->upload($file,$config);
//截图略缩图
$image = new \Think\Image();
$image->open($info['avatar_file']['path']);
$crop_path = './Uploads/Picture/'.$info['avatar_file']['savepath'].$pre.'_'.$info['avatar_file']['savename'];
$image->crop($picArr['width'], $picArr['height'],$picArr['x'],$picArr['y'])->save($crop_path);
//原图片路径
$info['org_path'] = $info['avatar_file']['path'];
//裁剪后图片路径
$info['crop_path'] = $crop_path;
//图片ID
$info['pic_id'] = $info['avatar_file']['id'];
return $info;
}
php 上传图片 裁剪,thinkphp_图片上传裁剪功能_已迁移相关推荐
- base64图裁剪 php_php图片上传类(支持缩放、裁剪、图片缩略功能)
namespace dollarphp; /** * @desc:图片上传类 * @author [Lee] ]> * 1.自动验证文件是表单提交的文件还是base64流提交的文件 * 2.验证 ...
- 云炬Android开发笔记 14 个人中心、图片裁剪、图片上传、收货地址、消息推送、权限管理等功能开发与一键式封装
阅读目录 0.优化 1.个人中心页面的布局 2. 订单列表逻辑梳理与实现 3. 个人信息的更新实现 3.1 个人信息页面的布局 3.3 数据的转化 5.3 图片库中图片选择事件的处理 5.4 相机 ...
- kindeditor上传图片php,Kindeditor编辑器添加图片上传水印功能(php代码)
KindEditor 是一套开源的在线HTML编辑器,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框.可以无缝地与 Java..NET.PH ...
- php上传图片 中文,php图片上传方法
php图片上传方法 发布于 2015-11-07 21:44:59 | 92 次阅读 | 评论: 0 | 来源: PHPERZ PHP开源脚本语言PHP(外文名: Hypertext Preproce ...
- vue 移动端头像裁剪_vue头像上传裁剪组件_一个漂亮的Vue组件,用于图像裁剪和上传...
vue头像上传裁剪组件 vue-image-crop-upload (vue-image-crop-upload) A beautiful vue component for image crop a ...
- java上传图片方法_java 图片上传方法
/*** 点击上传照片功能*/ publicString writeImg(){try{ HttpServletRequest request=WebUtils.getRequest();//requ ...
- java实现上传图片代码_Java图片上传实现代码
本文实例为大家分享了java图片上传代码,供大家参考,具体内容如下 import java.io.*; import java.net.*; /* *发送端 */ class picsend { pu ...
- php网页添加图片的代码,天天查询-PHP版的kindeditor编辑器加图片上传水印功能
首先简单介绍一下kindeditor编辑器: KindEditor 是一套开源的在线HTML编辑器,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本 ...
- php+jquery实现图片上传预览_和拖动位置值,PHP教程:thinkphp jquery实现图片上传和预览效果...
<PHP教程:thinkphp jquery实现图片上传和预览效果>要点: 本文介绍了PHP教程:thinkphp jquery实现图片上传和预览效果,希望对您有用.如果有疑问,可以联系我 ...
- 前后端分离实现图片上传的功能
由于最近开发的项目需要有上传图片的功能,并且能够让上传的图片能够在网页上预览出来.所以写下此篇文章,记录一下学习到的知识. 1,前端 前端项目是采用angularjs框架搭建的.图片上传功能在前端的代 ...
最新文章
- 几乎涵盖你需要的SpringBoot所有操作|高清PDF
- matlab一句一句调试,matlab程序怎样调试和运行
- python是用什么语言开发的-专为人工智能和数据科学而生的Go语言,或将取代Python...
- 用数组实现从文件搜索帐户和验证密码
- 八类网线和七类网线的区别_什么是七类网线?七类网线水晶头如何制作?
- 每日一则----算法----二分查找法
- 修改npm安装的全局路径和配置环境变量的坑
- 差分电荷密度 matlab,差分电荷密度
- Kettle资源库-元数据
- 什么是城市大数据?大数据如何应用在智慧城市中?
- 查看Windows的激活到期时间、具体版本号等具体系统信息
- cmor在matlab中,MATLAB小波变换指令及其功能介绍(超级有用)(最新整理)
- unrar file.rar 解压rar 问题,找不到unrar 命令。安装rar unrar流程及bug处理
- 用pip安装pytorch
- 【SSH框架/国际物流商综平台】-03 部门、用户、角色、模块 CURD BRAC认证 细粒度权限控制 BaseAction Page struts.xml *.hbm.xml
- 微信支付的服务器配置url超时,微信H5支付商家存在未配置的参数,请联系商家解决的...
- 「ReactNaitve」对hooks最佳实践的探索
- 老站长揭秘Google Adsense盈利的真相(2021版)
- 详细解读文字识别工具———Tesseract-OCR
- 【学习笔记】数理统计习题八