1.要想制作图片裁剪功能,可以使用网上的裁剪工具JCrop,网址是:https://github.com/tapmodo/Jcrop/

案例效果如下:

2.引入JCrop的js代码,具体要引入那些js可以参考JCrop案例:

3.编写的html代码如下:

<div 编写JS代码(注意这里的280和175表示的是我要一张长为280px像素高175px像素的图片):

//号字 红色 透明度0.5"; int x = 20; int y = 40;

* String imageFormat = "jpg"; String toPath =

* "D:/test/desk/alphaI2I-001.png";

*/

// imageObj.alphaWords2Image(srcImagePath, alpha, font, fontStyle,

// fontSize, color, inputWords, x, y, imageFormat, toPath); //设置文字水印

// imageObj.alphaImage2Image(srcImagePath, appendImagePath, alpha, x, y,

// 300, 200, imageFormat, toPath);//设置图片水印

/*

* String srcImagePath = "D:/test/fileSource/003.jpg"; int[] xPoints =

* {100,150,200,240,300}; int[] yPoints = {200,60,280,160,100}; int

* nPoints = 5; Color lineColor = Color.RED; String toPath =

* "D:/test/desk/polyline-003.jpg"; String imageFormat = "jpg";

* imageObj.drawPolyline(srcImagePath, xPoints, yPoints, nPoints,

* lineColor,toPath, imageFormat);//画折线

*/

/*

* int x1 = 50; int y1 = 100; int x2 = 600; int y2 = 150; Color

* lineColor = Color.BLUE; imageObj.drawLine(srcImagePath, x1, y1, x2,

* y2, lineColor,toPath, imageFormat);//画线段

*/

/*

* String srcImagePath = "D:/test/fileSource/002.jpg"; int x = 400; int

* y = 500; int width = 10; int height = 10; Color ovalColor =

* Color.RED; String imageFormat = "jpg"; String toPath =

* "D:/test/desk/point-002.jpg"; imageObj.drawPoint(srcImagePath, x, y,

* width, height, ovalColor, imageFormat, toPath);//画一个圆点

*/

/*

* List pointList = new ArrayList(); Point p1 = new Point(60,80);

* pointList.add(p1); Point p2 = new Point(160,80); pointList.add(p2);

* Point p3 = new Point(60,180); pointList.add(p3); Point p4 = new

* Point(260,180); pointList.add(p4); Point p5 = new Point(460,380);

* pointList.add(p5); String srcImagePath =

* "D:/test/fileSource/004.jpg"; int width = 10; int height = 10; Color

* ovalColor = Color.RED; String imageFormat = "jpg"; String toPath =

* "D:/test/desk/points-004.jpg"; imageObj.drawPoints(srcImagePath,

* pointList, width, height, ovalColor, imageFormat, toPath);//画出一组(多个)点

*/

/*

* int[] xPoints = {50,100,180,400,600}; int[] yPoints =

* {200,100,160,300,640}; int nPoints = 5; Color lineColor = Color.PINK;

* String srcImagePath = "D:/test/fileSource/003.jpg"; String toPath =

* "D:/test/desk/showpoints-003.jpg";

* imageObj.drawPolylineShowPoints(srcImagePath, xPoints, yPoints,

* nPoints, lineColor, width, height, ovalColor, toPath,

* imageFormat);//画折线并突出显示点

*/

/*

* String srcImagePath ="D:/test/fileSource/004.jpg"; int[] xPoints

* ={50,90,180,320,640}; int[] yPoints ={200,300,120,240,360}; int

* nPoints = 5; Color polygonColor = Color.PINK; float alpha = (float)

* 0.2; String imageFormat ="jpg"; String toPath

* ="D:/test/desk/drawalpha-004.jpg";

* imageObj.drawAndAlphaPolygon(srcImagePath, xPoints, yPoints, nPoints,

* polygonColor, alpha, imageFormat, toPath);

*/

/*

* String negativeImagePath = "D:/test/fileSource/001.jpg"; String

* additionImagePath = "D:/test/fileSource/006.png"; String toPath =

* "D:/test/fileSource/001.jpg"; long start =

* System.currentTimeMillis(); for(int i=0;i<1000;i++){ Random rand =

* new Random(); int x = rand.nextInt(1024); int y = rand.nextInt(768);

* imageObj.mergeBothImage(negativeImagePath, additionImagePath, x, y,

* toPath);//每次附加合并一张图片(循环若干次) } long end = System.currentTimeMillis();

* System.out.println(end-start);

*/

// 100 -- 45844

// 1000 -- 411156

/*

* 改进思路:将mergeBothImage方法 修改为mergeImageList方法,

* 通过将图片的坐标点装入list容器,然后再取出一来在方法中一次性与图片合并, 不再每次都打开底图、保存合成图片,关闭流

*/

// 叠加组合图像

/*

* String negativeImagePath = "D:/test/fileSource/001.jpg"; String

* toPath = "D:/test/fileSource/001.jpg"; String additionImagePath =

* "D:/test/fileSource/007.png"; List additionImageList = new

* ArrayList(); int count = 0; for(int

* i=0;i<100;i++){//为什么总是连续生成一样的随机数??? Random rand = new Random(); int x

* = rand.nextInt(1020); String xStr = x+""; int y = rand.nextInt(760);

* String yStr = y +""; String[] str = {xStr,yStr,additionImagePath};

* additionImageList.add(str); count++;

* //System.out.println(xStr+"   :     "+yStr); }

* System.out.println(count); long start = System.currentTimeMillis();

* imageObj.mergeImageList(negativeImagePath, additionImageList,"jpg",

* toPath); long end = System.currentTimeMillis();

* System.out.println(end-start);

*/

// 第一次 第二次 第三次

// 100张耗时(毫秒) --2003 1792 1869 1747 1871 1793

// 1000张耗时(毫秒) --15334 15200 15236 15903 16028 15545

// 10000张耗时(毫秒) --153010 153340 152673 154978 156506 154854

// 如果list.size()<=100,则调用此方法,

// 如果list.size()>100,则调用Jmagick的方法。

/*

* List iamgePathList = new ArrayList(); // D:/test/16a/

* iamgePathList.add("D:/test/16a/12384_2492.jpg");

* iamgePathList.add("D:/test/16a/12384_2493.jpg");

* iamgePathList.add("D:/test/16a/12384_2494.jpg");

* iamgePathList.add("D:/test/16a/12384_2495.jpg");

* iamgePathList.add("D:/test/16a/12384_2496.jpg");

* iamgePathList.add("D:/test/16a/12384_2497.jpg");

* iamgePathList.add("D:/test/16a/12384_2498.jpg");

* iamgePathList.add("D:/test/16a/12384_2499.jpg");

* iamgePathList.add("D:/test/16a/12384_2500.jpg");

* iamgePathList.add("D:/test/16a/12384_2501.jpg");

* iamgePathList.add("D:/test/16a/12384_2502.jpg");

*/

// String imageFormat = "jpg";

// String toPath = "D:/test/desk/16a_v1.jpg";

// imageObj.joinImageListHorizontal(iamgePathList, imageFormat, toPath);

/*

* String imageFormat = "jpg"; String[] pics1 =

* {"D:/test/16a/12384_2502.jpg","D:/test/16a/12384_2501.jpg",

* "D:/test/16a/12384_2500.jpg"

* ,"D:/test/16a/12384_2499.jpg","D:/test/16a/12384_2498.jpg",

* "D:/test/16a/12384_2497.jpg"

* ,"D:/test/16a/12384_2496.jpg","D:/test/16a/12384_2495.jpg",

* "D:/test/16a/12384_2494.jpg"

* ,"D:/test/16a/12384_2493.jpg","D:/test/16a/12384_2492.jpg"};

*

* String[] pics2 =

* {"D:/test/16a/12385_2502.jpg","D:/test/16a/12385_2501.jpg",

* "D:/test/16a/12385_2500.jpg"

* ,"D:/test/16a/12385_2499.jpg","D:/test/16a/12385_2498.jpg",

* "D:/test/16a/12385_2497.jpg"

* ,"D:/test/16a/12385_2496.jpg","D:/test/16a/12385_2495.jpg",

* "D:/test/16a/12385_2494.jpg"

* ,"D:/test/16a/12385_2493.jpg","D:/test/16a/12385_2492.jpg"};

*

* String[] pics3 =

* {"D:/test/16a/12386_2502.jpg","D:/test/16a/12386_2501.jpg",

* "D:/test/16a/12386_2500.jpg"

* ,"D:/test/16a/12386_2499.jpg","D:/test/16a/12386_2498.jpg",

* "D:/test/16a/12386_2497.jpg"

* ,"D:/test/16a/12386_2496.jpg","D:/test/16a/12386_2495.jpg",

* "D:/test/16a/12386_2494.jpg"

* ,"D:/test/16a/12386_2493.jpg","D:/test/16a/12386_2492.jpg"};

*

* String[] pics4 =

* {"D:/test/16a/12387_2502.jpg","D:/test/16a/12387_2501.jpg",

* "D:/test/16a/12387_2500.jpg"

* ,"D:/test/16a/12387_2499.jpg","D:/test/16a/12387_2498.jpg",

* "D:/test/16a/12387_2497.jpg"

* ,"D:/test/16a/12387_2496.jpg","D:/test/16a/12387_2495.jpg",

* "D:/test/16a/12387_2494.jpg"

* ,"D:/test/16a/12387_2493.jpg","D:/test/16a/12387_2492.jpg"};

*

* String[] pics5 =

* {"D:/test/16a/12388_2502.jpg","D:/test/16a/12388_2501.jpg",

* "D:/test/16a/12388_2500.jpg"

* ,"D:/test/16a/12388_2499.jpg","D:/test/16a/12388_2498.jpg",

* "D:/test/16a/12388_2497.jpg"

* ,"D:/test/16a/12388_2496.jpg","D:/test/16a/12388_2495.jpg",

* "D:/test/16a/12388_2494.jpg"

* ,"D:/test/16a/12388_2493.jpg","D:/test/16a/12388_2492.jpg"};

*

* String[] pics6 =

* {"D:/test/16a/12389_2502.jpg","D:/test/16a/12389_2501.jpg",

* "D:/test/16a/12389_2500.jpg"

* ,"D:/test/16a/12389_2499.jpg","D:/test/16a/12389_2498.jpg",

* "D:/test/16a/12389_2497.jpg"

* ,"D:/test/16a/12389_2496.jpg","D:/test/16a/12389_2495.jpg",

* "D:/test/16a/12389_2494.jpg"

* ,"D:/test/16a/12389_2493.jpg","D:/test/16a/12389_2492.jpg"};

*

* String toPath1 = "D:/test/desk/16a_v1.jpg"; String toPath2 =

* "D:/test/desk/16a_v2.jpg"; String toPath3 =

* "D:/test/desk/16a_v3.jpg"; String toPath4 =

* "D:/test/desk/16a_v4.jpg"; String toPath5 =

* "D:/test/desk/16a_v5.jpg"; String toPath6 =

* "D:/test/desk/16a_v6.jpg";

*

* String[] pics7 = {toPath1,toPath2,toPath3,toPath4,toPath5,toPath6};

* String toPath7 = "D:/test/desk/16a_h1.jpg";

*

* long start = System.currentTimeMillis();

* imageObj.joinImageListVertical(pics1, imageFormat, toPath1);

* imageObj.joinImageListVertical(pics2, imageFormat, toPath2);

* imageObj.joinImageListVertical(pics3, imageFormat, toPath3);

* imageObj.joinImageListVertical(pics4, imageFormat, toPath4);

* imageObj.joinImageListVertical(pics5, imageFormat, toPath5);

* imageObj.joinImageListVertical(pics6, imageFormat, toPath6);

*

* imageObj.joinImageListHorizontal(pics7, imageFormat, toPath7); long

* end = System.currentTimeMillis(); System.out.println(end-start);

*/

}

}

使用JCrop进行图片裁剪,裁剪js说明,裁剪预览,裁剪上传,裁剪设计的图片处理的工具类和代码的更多相关文章

  1. js多图预览及上传功能

    <%-- Created by IntelliJ IDEA. User: Old Zhang Date: 2018/12/27 Time: 11:17 To change this templa ...

  2. 原生js实现图片预览并上传

    最近主导的PC客户端网站重构工程告一段落,下一阶段开始给公司APP开发H5页面,技术栈是react.最近碰到一个需求:需要在H5页面上添加身份证照片,预览并上传.因为要兼容安卓4.4以下版本的手机,所 ...

  3. 用js实现预览待上传的本地图片

    js实现预览待上传的本地图片,代码如下: <form name="form5" id="form5" method="post" ac ...

  4. 基于“formData批量上传的多种实现” 的多图片预览、上传的多种实现

    前言 图片上传是web项目常见的需求,我基于之前的博客的代码(请戳:formData批量上传的多种实现)里的第三种方法实现多图片的预览.上传,并且支持三种方式添加图片到上传列表:选择图片.复制粘贴图片 ...

  5. H5-FileReader实现图片预览&Ajax上传文件

    图片预览 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  6. 如何预览将要上传的图片-使用H5的FileAPI

    这篇将要说的东西已经不新鲜了. 参考资料: Reading files in JavaScript using the File APIs (鉴于作者在美国, 我姑且认为作者母语是英语, 当然链接中有 ...

  7. 前端图片预览,上传前预览,兼容IE7、8、9、10、11,Firefox,Chrome(学习到的知识)

    文章地址:http://www.cnblogs.com/rubylouvre/p/4597344.html 一.window.URL 在Chrome中,window.URL和window.webkit ...

  8. vue组件利用formdata图片预览以及上传《转载》

    转载修改 在项目中直接新建一个单文件页,复制一下代码即可       upload组件: <template> <div class="vue-uploader" ...

  9. vue组件利用formdata图片预览以及上传

    转载修改 在项目中直接新建一个单文件页,复制一下代码即可       upload组件: <template> <div class="vue-uploader" ...

  10. jquery+html5+canvas实现图片 预览 压缩 上传

    javascirpt (function($){ $.fn.extend({ aiiUpload:function(obj) { if(typeof obj !="object") ...

随机推荐

  1. 利用QrCode.Net生成二维码 asp.net mvc c#

    利用QrCode.Net生成二维码 asp.net mvc c# 里面介绍了.net的方式及js的方式,还不错. 里面用到的qrcode.net的类库下载地址:https://qrcodenet.co ...

  2. Dynamics CRM2016 Set Values of all Data Types using Web API

    之前的博客里有谈到了web api的增删改查,里面会涉及到各种类型字段的赋值,因为时间和精力关系,没有对所有的字段类型一一测试,这篇博文中给出了全部的 http://inogic.com/blog/2 ...

  3. 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50824912 相关地址介绍 : -- Universal I ...

  4. Mac小技巧:快速查看指定应用程序的所有窗口

    我们知道在Mac中快速在系统所有程序中切换得快捷键为: cmd + tab 不过有时我们需要快速查看某一个程序的所有窗口,那又该如何呢? 以下方法在MacOS 10.12中测试成功! Mac默认该功能 ...

  5. Dynamics CRM2013 Form利用window.location.reload()进行全局刷新带来的问题及解决办法

    CRM2013以后,表单的保存后变成了局部刷新而非全局刷新,但很多情况下我们需要刷新整个页面,通过刷新页面来使脚本执行或者业务规则执行来实现某些业务效果,一般我们会使用window.location. ...

  6. Xcode7.3.1中通过最新的CocoaPod安装pop动画引擎

    CocoaPod是一个用ruby实现,用于方便的管理Xcode中第三方插件的管理器.用它我们可以很方便的安装和升级插件而不用担心破坏原有的项目. 而pop是一个用于实现App中动画的引擎,它是由Fac ...

  7. K均值聚类的失效性分析

    K均值聚类是一种应用广泛的聚类技术,特别是它不依赖于任何对数据所做的假设,比如说,给定一个数据集合及对应的类数目,就可以运用K均值方法,通过最小化均方误差,来进行聚类分析. 因此,K均值实际上是一个最 ...

  8. 自己写一个网页版的Markdown实时编辑器

    这几天忙着使用Python+Django+sqlite 搭建自己的博客系统,但是单纯的使用H5的TextArea,简直太挫了有木有.所以,就想模仿一下人家内嵌到网页上的Markdown编辑器,从而让自 ...

  9. Android水印相机

    本篇文章实现的水印相机,类似于qq空间中的水印相机功能,因之前看过一个demo上实现了一个简陋的水印相机功能,觉得挺有意思,就在此基础上进行了修改,优化和完善,并增加了部分功能,使之更接近于qq水印相 ...

  10. Druid VS Antlr4

    DRUID VS ANTLR4 测试方法 环境:x86_64,eclipse kepler,jdk 6 测试对象:antlr v4,druid手写sql parser模块 测试过程:分别采用单线程.多 ...