图片上传控件用的是zyupload控件,使用过程中遇到了一些问题,特别记录下来

上图是目前的使用效果,这个控件我是用js代码动态添加出来的

HTML代码:

 <div class="widget-body">
<div class="widget-main padding-12" id="uploadarea">
<ul class="ace-thumbnails clearfix" id="gallery">
</ul>
</div>
</div>

js代码:

function initZyupload(){
var uploadarea=document.getElementById("uploadarea");
var zyupload=document.createElement("div");
zyupload.setAttribute("id","zyupload");
zyupload.setAttribute("class","zyupload");
uploadarea.appendChild(zyupload);
$("#zyupload").zyUpload({
width : "700px", // 宽度
height : "400px", // 高度
itemWidth : "140px", // 文件项的宽度
itemHeight : "140px", // 文件项的高度
url : $("#zyupload").url= basePath+"/smart/activity/saveImages.do?id="+$("#form_Id").val(), // 上传文件的路径
fileType : ["jpg","jpeg","bmp","png"],// 上传文件的类型
fileSize : 51200000, // 上传文件的大小
multiple : true, // 是否可以多个文件上传
dragDrop : true, // 是否可以拖动上传文件
tailor : true, // 是否可以裁剪图片
del : true, // 是否可以删除文件
finishDel : false, // 是否在上传文件完成后删除预览
/* 外部获得的回调接口 */
onSelect: function(selectFiles, allFiles){ // 选择文件的回调方法 selectFile:当前选中的文件 allFiles:还没上传的全部文件
console.info("当前选择了以下文件:");
console.info(selectFiles); },
onDelete: function(file, files){ // 删除一个文件的回调方法 file:当前删除的文件 files:删除之后的文件
console.info("当前删除了此文件:");
console.info(file.name);
},
onSuccess: function(file, response){ // 文件上传成功的回调方法
console.info("此文件上传成功:");
console.info(file.name);
console.info("此文件上传到服务器地址:");
console.info(response);
var obj=eval("("+response+")");
$("#uploadInf").append("<p>上传成功,文件地址是:" + obj.result+ "</p>");
var imgs=$("#form_url").val();//获取原url组
//在url后添加新图片的url
if(imgs){
imgs+=","+obj.msg;
}else{
imgs+=obj.msg;
}
$("#form_url").val(imgs);//设置新url组
saveActivityInfo();
clearImg();//清除所有图片
initImg(imgs);//加载图片 },
onFailure: function(file, response){ // 文件上传失败的回调方法
console.info("此文件上传失败:");
console.info(file.name);
bootbox.alert("上传失败");
},
onComplete: function(response){ // 上传完成的回调方法
console.info("文件上传完成");
console.info(response); }
});
}

这个控件自带裁剪功能,但是当图片大小过大的时候就会显示不全,因为它并没有调整图片大小,原本多大就是多大

这个是我修改过后的效果

现在可以根据显示区域的大小来对图片进行缩放

源码代码修改部分,我现在技术不够,代码写的比较烂

首先定义2个全局变量

var ScaleWidth=0;//裁剪后图片宽度
var Scale=1;//图片缩放倍数

首先找到定义图片宽度高度处,进行修改

    zoomContent.html(image).delay(500).addClass("loading");
image.load(render).attr("src", para.src);
var editWidth = $("#zoom").width();
var editHeight = $("#zoom").height();
var xScale = 1;
var yScale = 1;
if(editWidth < image.width()){
xScale = editWidth/image.width();
}
if(editHeight < image.height()){
yScale = editHeight/image.height();
}
if(xScale > yScale){
xScale = yScale;
Scale=xScale;
}

其他地方也要相应修改

    zoomContent.animate({
width: image.width()*xScale,
height: image.height()*xScale,
marginTop: -(image.height()*xScale / 2) - borderWidth,
marginLeft: -(image.width()*xScale / 2) - borderWidth
},
200,
function() {
show(image)
});
function show(image) { image.show();
zoomContent.removeClass("loading");
self.createTailorPlug()
}
}
};
this.createTailorPlug = function() {
var width = $("#tailorImg").width();
var height = $("#tailorImg").height(); var editWidth = $("#zoom").width();
var editHeight = $("#zoom").height();
var xScale = 1;
var yScale = 1;
if(editWidth < width){
xScale = editWidth/width;
}
if(editHeight < height){
yScale = editHeight/height;
}
if(xScale > yScale){
xScale = yScale;
Scale=xScale;
}
ScaleWidth=width*xScale;
$("#tailorImg").css("width",width*xScale);
$("#tailorImg").css("height",height*xScale);
$("#tailorImg").css("position","relative");
var x1 = (width*Scale/2)-(width*Scale/5);
var y1 = (height*Scale/2)-(height*Scale/5);
var x2 = (width*Scale/2)+(width*Scale/5);
var y2 = (height*Scale/2)+(height*Scale/5);

好了,到此为止前端的工作完成,接下来是后端实现,项目用的是spingmvc+sping+hibernate的架构

java代码Controller部分:

 @RequestMapping(value = "/saveImages")
@ResponseBody
public MessageBox saveImages(MultipartFile file,String id) throws Exception{
this.logAllRequestParams(); String rootPath = this.getSession().getServletContext().getRealPath("/");
Double width = Double.parseDouble(this.getReqParam("tailorWidth")); //图片缩放所需宽度
String tailor = this.getReqParam("tailor");
ImageCut cut = null;
if(!tailor.equals("false")){
cut = JSON.parseObject(tailor, ImageCut.class);
} //重命名
String fileName = file.getOriginalFilename();
String fileSuffix=fileName.substring(fileName.lastIndexOf(".")+1);
fileName=String.valueOf(System.currentTimeMillis())+"."+fileSuffix; String fileParant=rootPath + "/mirror/activity/"+id+"/";
File folder = new File(fileParant);
if (!folder.exists()){
folder.mkdirs();
}
File f = new File(folder,fileName);
file.transferTo(f);
//图片裁剪
if(CommonUtil.isNotBlank(cut)){
ImageCutUtil.covertImage(f, width, cut);
}else{
ImageCutUtil.commpressPic(f.getPath(), f.getPath());
}
return returnSuccessInfo(fileName,fileParant+fileName);
}

到此为止图片上传裁剪功能全部完成

图片上传裁剪zyupload的更多相关文章

  1. Uploadify & jQuery.imgAreaSelect 插件实现图片上传裁剪

    在网站中需要一个图片上传裁剪的功能,借鉴这篇文章 Ajax+PHP+jQuery图片截图上传 的指点,找到了jquery.imgAreaSelect这个不错插件,能对图片进行自定义区域选择并给出坐标, ...

  2. 基于Jcrop的图片上传裁剪加预览

    最近自己没事的时候研究了下图片上传,发现之前写的是有bug的,这里自己重新写了一个! 1.页面结构 <!DOCTYPE html> <html lang="en" ...

  3. 图片上传裁剪(asp.net)

    图片在线裁剪功能 前台展现用jquery.Jcrop实现,后台使用 System.Drawing.Image类来进行裁剪 完整dome下载 http://download.csdn.net/detai ...

  4. JavaScript实现本地图片上传前进行裁剪预览

    本项目支持IE8+,测试环境IE8,IE9,IE10,IE11,Chrome,FireFox测试通过 另:本项目并不支持Vue,React等,也不建议,引入JQuery和Vue.React本身提倡的开 ...

  5. PHP结合zyupload多功能图片上传实例

    PHP结合zyupload多功能图片上传实例,支持拖拽和裁剪.可以自定义高度和宽度,类型,远程上传地址等. zyupload上传基本配置 $("#zyupload").zyUplo ...

  6. Jquery插件-Html5图片上传并裁剪

    /** * 图片裁剪 * @author yanglizhe * 2015/11/16 */ (function($){ /** * Drag */ var Drag={obj:null,init:f ...

  7. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间

    现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...

  8. java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。

    java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...

  9. Django使用cropbox包来上传裁剪图片

    1.使用cropbox包来上传裁剪图片,可见介绍:https://www.jianshu.com/p/6c269f0b48c0I ImgCrop包包括:css--style.css,js--cropb ...

随机推荐

  1. (简单) POJ 2492 A Bug's Life,二分染色。

    Description Background Professor Hopper is researching the sexual behavior of a rare species of bugs ...

  2. (简单) FZU 1686 神龙的难题 , DLX+可重复覆盖。

    Description 这是个剑与魔法的世界.英雄和魔物同在,动荡和安定并存.但总的来说,库尔特王国是个安宁的国家,人民安居乐业,魔物也比较少.但是.总有一些魔物不时会进入城市附近,干扰人民的生活.就 ...

  3. 《算法导论》2.3-7 检查集合中是否存在两数字和为指定的X--算法和证明

    习题2.3-7:设计一个算法,对于一个给定的包含n个整数的集合S和另一个给定的整数X,该算法可以在时间内确定S中是否存在两个元素,使得它们的和恰为X. 解题思路:首先应该想到的是先用一个的排序算法对S ...

  4. AFNetWorking发送post请求,Code=-1016错误

    使用AFNetWorking发送post请求时,可能会出现下面Code=-1016问题.打印的error如下: Error:Error Domain=com.alamofire.error.seria ...

  5. 增量式PID的stm32实现(转)

    源:增量式PID的stm32实现,整定过程 首先说说增量式PID的公式,这个关系到MCU算法公式的书写,实际上两个公式的写法是同一个公式变换来得,不同的是系数的差异. 资料上比较多的是: 还有一种是: ...

  6. S3C2440外部中断系统详解

    个中断源的请求.提供这些中断源的是内部外设,如DMA控制器.UART.IIC等等.在这些中断源中,UARTn.AC97和EINTn中断对于中断控制器而言是“或”关系.任意一个中断发生都会触发总中断 当 ...

  7. SQL Server数据库备份方法

    数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段.一个合理的数据库备份方案,应该能够在数据丢失时,有效地恢复重要数据,同时需要考虑技术实现难度和有效地利用资源. 数据库 ...

  8. Mongodb 导出json 和csv 格式数据

    导出到json: $ mongoexport.exe  -d TestDB -c TestCollection -o  ./test.json 导出到csv: If you want to outpu ...

  9. Bzoj3756

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3756 题解:乱搞 代码: #include<iostream> #include ...

  10. 使用python爬虫抓站的一些技巧总结:进阶篇

    Reference:http://python.jobbole.com/82000/ 一.gzip/deflate支持 现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页 ...