利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)


Posted in Javascript onDecember 02, 2016

利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)

这个应用的关键:

 1.让左边选择区域和右边显示的图像信息保持一至。

 2.根据左边选择区域的大小,来让右边有一个对局部放大或缩小的效果。

    3.后台上传功能。

那么这一次,只谈[放大]或[缩小]。[位置]和[上传]问题,下次,我再写下(因为那个插件代码太多,我也没看完,正在学习研究当中)。

["区域":是宽*高,也就是面积;]

["放大或缩小":是一个比例值,通常我们说放大或缩小,都说放大或缩小百分之多少,或者说放大或缩小多少倍数]

一、怎么能放大或者缩小图片的局部?

局部放大:实质是将图片整个放大,即把图片的宽度和高度改变大,然后将放大后的图片,在一个固定大小(当然是比原图小的框)的框中,显示出来。

局部放大:实质是将图片整个缩小,即把图片的宽度和高度改变小,然后将缩小后的图片,在一个固定大小(当然是比原图小的框)的框中,显示出来。

二、左右布局:

左右各有一张相同的图片,左边选中区域的改变,会让右边的图片,改变大小,根据第一点讲的,所以就有了局部放大缩小效果;

三、放大缩小公式:

左边是原图,右边是缩小或放大后的图。规律是左边的选中区域越大,那么右边也将缩小这个图,反之左边选中区域越小,那么右边的图就会放大.

这个规律告诉我们,算法中应该有除法。因为除法中,分子不变,分母变大,那么结果越小,反之越大。所以除法中的在分子,不变的情况下,分母与结果正好是一对,反比关系,一个大,一个就小,反之,一个小,另一个就大。也正好和我们这个应用中的图片放大缩小,关系一至。

四、目的

1.我们要的结果,是右边的图片大小和显示位置(显示位置,下次再说,正在研究中);

五、具体的算法:

左图和右图宽:一样300PX;

左图和右图高:一样300PX;

左图显示区域:宽300PX,高300PX

右图显示区域:宽100PX,高100PX

选中区域的宽设为:selection.width(具体怎么获得这个值,我也正在分析当中。先设为一个末知数)

选中区域的高设为:selection.Height(具体怎么获得这个值,我也正在分析当中。先设为一个末知数)

宽的比例值设为:scaleX(具体怎么获得这个值,我也正在分析当中。先设为一个末知数)

高的比例值设为:scaleX(具体怎么获得这个值,我也正在分析当中。先设为一个末知数)

这里一共有四个东西要理清,才能确定下面的公式。

a、 左图、右图的大小

(宽度都是相同)

b、 左边显示区域宽高

(300PX*300PX)

c.、右边显示区域宽高

(100px*100px)

d.、选择区域的宽高值:  (这个是通过JQ获得selection.width,selection.Height)

5.1获得比例值:

分母:根据第三点,那么选中区域的宽:selection.width 和 选中区域的高:selection.Height肯定是分母了,因为根据实例分析,他俩的值越大,右边的图应该越小。

分子:100px。也就是右边显示区域的宽度值。

  为什么是它的值?我们的目的是要改变右边图片的宽或高的值,为什么会与显示区域的宽度值相关联呢?

 这三者系一定要弄清。[“选择区域大小”、“右边显示区域大小”、“右边图片大小”];

 选择区域越大,超过了右边显示区域的大小,那么右边图片要想在这个区域中显示,只能缩小图片。

 (一个容器A只能装100*100的东西,现在你要放B200*200的东西,那么容器不变,只能把东西变小了)

 反之选择区域越小,小于右边显示区域的大小,那么右边图片要想在这个区域填满显示,只能大放图片。

 (一个容器A只能装100*100的东西,现在你要放B50*50的东西,那么容器不变,只能把东西变大了,才能填满整个容器)

 选择区域小大,等于右边显示区域大小,不用放大或缩小,刚刚好;

(一个容器A只能装100*100的东西,现在你要放B100*100的东西,那么容器不变,东西也不变,刚好填满整个容器)

得出:

宽的比例值设为:scaleX = 100 / selection.width;

高的比例值设为:scaleX = 100 / selection.height; 

5.2 计算右边图片的大小:

用得到的这个比例值,去乘以右边图片的宽高,这里的300正是右边图片的宽和高,左边和右边是同一个图片。宽度是一样的。

右边图片的width: Math.round(scaleX * 300),

右边图片的height: Math.round(scaleY * 300),

六、问题:

selection.width;

selection.height

这两个值如何获得?

我是想先把宏观的大的东西弄清楚,以后再专门写几篇有关如何获得这个里面关键的值的分析。

必竟这个插件很大,代码很多复杂,所以只能一步一步的深入了。

这是插件网址:http://odyniec.net/projects/imgareaselect/

以上就是本文的全部内容,希望对大家有所帮助,有兴趣的可以看下《利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)》,谢谢对三水点靠木的支持!

Javascript 相关文章推荐
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
Oct 15 Javascript
原生js实现跨浏览器获取鼠标按键的值
Apr 08 Javascript
jquery提取元素里的纯文本不包含span等里的内容
Sep 30 Javascript
jQuery中detach()方法用法实例
Dec 25 Javascript
javascript中replace( )方法的使用
Apr 24 Javascript
BootStrap响应式导航条实例介绍
May 06 Javascript
vue实现单选和多选功能
Aug 11 Javascript
详解layui弹窗父子窗口之间传参数的方法
Jan 16 Javascript
JS严格模式知识点总结
Feb 27 Javascript
angular实现input输入监听的示例
Aug 31 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
Oct 16 Javascript
javascript中的相等操作符(==与===区别)
Dec 21 Javascript
关于Vue.js一些问题和思考学习笔记(1)
Dec 02 #Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
Dec 02 #Javascript
基于javascript实现的快速排序
Dec 02 #Javascript
微信公众平台开发教程(五)详解自定义菜单
Dec 02 #Javascript
基于jQuery实现滚动切换效果
Dec 02 #Javascript
遍历json 对象的属性并且动态添加属性的实现
Dec 02 #Javascript
Vue.js组件tree实现无限级树形菜单
Dec 02 #Javascript
You might like
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
python将文本分每两行一组并保存到文件
2018/03/19 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
Python实现Dijkstra算法
2018/10/17 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
python tkinter实现屏保程序
2019/07/30 Python
python序列化与数据持久化实例详解
2019/12/20 Python
python中sys模块是做什么用的
2020/08/16 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
shell程序中如何注释
2012/02/17 面试题
企业总经理岗位职责
2014/02/13 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
电力培训心得体会
2014/09/02 职场文书
走进毛泽东观后感
2015/06/04 职场文书
拔河比赛新闻稿
2015/07/17 职场文书
仓库管理制度范本
2015/08/04 职场文书
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript