圖片上傳裁剪zyupload

圖片上傳控件用的是zyupload控件,使用過程當中遇到了一些問題,特別記錄下來css

上圖是目前的使用效果,這個控件我是用js代碼動態添加出來的html

HTML代碼:前端

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

js代碼:java

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);

            }
        });
    }

這個控件自帶裁剪功能,可是當圖片大小過大的時候就會顯示不全,由於它並無調整圖片大小,本來多大就是多大後端

這個是我修改事後的效果服務器

如今能夠根據顯示區域的大小來對圖片進行縮放架構

源碼代碼修改部分,我如今技術不夠,代碼寫的比較爛mvc

首先定義2個全局變量app

var ScaleWidth=0;//裁剪後圖片寬度
var Scale=1;//圖片縮放倍數

首先找到定義圖片寬度高度處,進行修改this

    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);
    }

到此爲止圖片上傳裁剪功能所有完成

相關文章
相關標籤/搜索