准备材料

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_图片上传裁剪功能_已迁移相关推荐

  1. base64图裁剪 php_php图片上传类(支持缩放、裁剪、图片缩略功能)

    namespace dollarphp; /** * @desc:图片上传类 * @author [Lee] ]> * 1.自动验证文件是表单提交的文件还是base64流提交的文件 * 2.验证 ...

  2. 云炬Android开发笔记 14 个人中心、图片裁剪、图片上传、收货地址、消息推送、权限管理等功能开发与一键式封装

    阅读目录 0.优化 1.个人中心页面的布局 2. 订单列表逻辑梳理与实现 3. 个人信息的更新实现 3.1 个人信息页面的布局 3.3 数据的转化  5.3 图片库中图片选择事件的处理  5.4 相机 ...

  3. kindeditor上传图片php,Kindeditor编辑器添加图片上传水印功能(php代码)

    KindEditor 是一套开源的在线HTML编辑器,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框.可以无缝地与 Java..NET.PH ...

  4. php上传图片 中文,php图片上传方法

    php图片上传方法 发布于 2015-11-07 21:44:59 | 92 次阅读 | 评论: 0 | 来源: PHPERZ PHP开源脚本语言PHP(外文名: Hypertext Preproce ...

  5. vue 移动端头像裁剪_vue头像上传裁剪组件_一个漂亮的Vue组件,用于图像裁剪和上传...

    vue头像上传裁剪组件 vue-image-crop-upload (vue-image-crop-upload) A beautiful vue component for image crop a ...

  6. java上传图片方法_java 图片上传方法

    /*** 点击上传照片功能*/ publicString writeImg(){try{ HttpServletRequest request=WebUtils.getRequest();//requ ...

  7. java实现上传图片代码_Java图片上传实现代码

    本文实例为大家分享了java图片上传代码,供大家参考,具体内容如下 import java.io.*; import java.net.*; /* *发送端 */ class picsend { pu ...

  8. php网页添加图片的代码,天天查询-PHP版的kindeditor编辑器加图片上传水印功能

    首先简单介绍一下kindeditor编辑器: KindEditor 是一套开源的在线HTML编辑器,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本 ...

  9. php+jquery实现图片上传预览_和拖动位置值,PHP教程:thinkphp jquery实现图片上传和预览效果...

    <PHP教程:thinkphp jquery实现图片上传和预览效果>要点: 本文介绍了PHP教程:thinkphp jquery实现图片上传和预览效果,希望对您有用.如果有疑问,可以联系我 ...

  10. 前后端分离实现图片上传的功能

    由于最近开发的项目需要有上传图片的功能,并且能够让上传的图片能够在网页上预览出来.所以写下此篇文章,记录一下学习到的知识. 1,前端 前端项目是采用angularjs框架搭建的.图片上传功能在前端的代 ...

最新文章

  1. 几乎涵盖你需要的SpringBoot所有操作|高清PDF
  2. matlab一句一句调试,matlab程序怎样调试和运行
  3. python是用什么语言开发的-专为人工智能和数据科学而生的Go语言,或将取代Python...
  4. 用数组实现从文件搜索帐户和验证密码
  5. 八类网线和七类网线的区别_什么是七类网线?七类网线水晶头如何制作?
  6. 每日一则----算法----二分查找法
  7. 修改npm安装的全局路径和配置环境变量的坑
  8. 差分电荷密度 matlab,差分电荷密度
  9. Kettle资源库-元数据
  10. 什么是城市大数据?大数据如何应用在智慧城市中?
  11. 查看Windows的激活到期时间、具体版本号等具体系统信息
  12. cmor在matlab中,MATLAB小波变换指令及其功能介绍(超级有用)(最新整理)
  13. unrar file.rar 解压rar 问题,找不到unrar 命令。安装rar unrar流程及bug处理
  14. 用pip安装pytorch
  15. 【SSH框架/国际物流商综平台】-03 部门、用户、角色、模块 CURD BRAC认证 细粒度权限控制 BaseAction Page struts.xml *.hbm.xml
  16. 微信支付的服务器配置url超时,微信H5支付商家存在未配置的参数,请联系商家解决的...
  17. 「ReactNaitve」对hooks最佳实践的探索
  18. 老站长揭秘Google Adsense盈利的真相(2021版)
  19. 详细解读文字识别工具———Tesseract-OCR
  20. 【学习笔记】数理统计习题八

热门文章

  1. 如何防止输入同样的编号到数据库中(30分)
  2. 十三:中介者模式(联盟与派系)
  3. 关于DES加密内部收费版
  4. 单片机的c语言0xef,单片机的C语言编程
  5. 体验谷歌菜市场镜像版
  6. 高德地图 聚合效果
  7. select函数使用细节
  8. 初学者关于贝叶斯纳什均衡各类符号的一点理解
  9. Visual Studio Code——做嵌入式C/C++开发常用的编辑器软件安装及基本使用总结
  10. html-5表白神器源码,html5开发表白神器实现代码