加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java实现上传图片进行切割的方法

发布时间:2020-05-27 18:19:43 所属栏目:Java 来源:互联网
导读:本文实例讲述了java实现上传图片进行切割的方法。分享给大家供大家参考。具体分析如下:

本文实例讲述了java实现上传图片进行切割的方法。分享给大家供大家参考。具体分析如下:

为什么我要进行上传的图片进行切割呢,我这个项目的图片是部门logo,每个部门都可以选择不同的logo,但是要应对浏览器的兼容以及拉伸,我选择了把一张图片切成左、中、右和剩下的部分,因为左边和中变可能会有图案或者字所以不能拉伸,拉伸的只是右边的部分,剩下的部分自适应就可以了。所以用了javax的ImageReader来操作。最后以blob类型保存数据库中。
首先要在form表单里面写上enctype="multipart/form-data"
复制代码 代码如下:<form method="post" id="mainForm" action="${ctx }/admin/department!save.action" enctype="multipart/form-data">

下面在表单中写上上传组件
复制代码 代码如下:<tr> 
 <td style="width: 100px;"> 
     <strong>上传Logo:</strong> 
     <input type="hidden" name="suffix" id="suffix" value="${depart.departmentLogo.suffix }"/> 
 </td> 
 <td style="width: 225px;"> 
     <input type="file" name="logoFile" id="logoFile" onchange="checkFile();"/> 
 </td> 
</tr> 
<tr> 
 <td style="width: 100px;"></td> 
 <td style="width: 225px;"> 
     <span class="red">(图片格式:jpg,jpeg,bmp,gif,png;</span><br/> 
     <span class="red">推荐大小:1120×80像素)</span> 
 </td> 
</tr>

图片检查的checkFile()方法用于检查图片是否以规定格式结尾以及是否没有选择
复制代码 代码如下:function checkFile(){ 
         
        var value = $("#logoFile").val(); 
        if(!value){ 
            alert("请选择您要上传的图片!"); 
            return false; 
        }else{ 
            if(value.lastIndexOf(".jpg") != -1){ 
                $("#suffix").val("jpg"); 
                return true; 
            }else if(value.lastIndexOf(".jpeg") != -1){ 
                $("#suffix").val("jpeg"); 
                return true; 
            }else if(value.lastIndexOf(".gif") != -1){ 
                $("#suffix").val("gif"); 
                return true; 
            }else if(value.lastIndexOf(".bmp") != -1){ 
                $("#suffix").val("bmp"); 
                return true; 
            }else if(value.lastIndexOf(".png") != -1){ 
                $("#suffix").val("png"); 
                return true; 
            }else{ 
                alert("对不起,您上传文件格式有误,请选择指定格式的图片文件上传"); 
                return false; 
            } 
        } 
}

下面就是进行后台的save操作了。
复制代码 代码如下:public String save() throws Exception { 
        HttpServletRequest request = ServletActionContext.getRequest() ; 
        String departId = request.getParameter("id") ; 
        String departName = request.getParameter("name") ; 
        String companyId = request.getParameter("companyId") ; 
        //图片后缀 
        String suffix = request.getParameter("suffix"); 
        List<Menu> listMenu = new ArrayList<Menu>() ; 
        Company company = new Company() ; 
        company.setId(Long.valueOf(companyId)) ; 
        if(this.logoFile != null && departName != null && companyId != null && suffix != null){ 
            //获取解析图片的ImageReader 
            Iterator<ImageReader> imageReaders = ImageIO.getImageReadersByFormatName(suffix); 
            ImageReader imageReader = imageReaders.next(); 
            //把图片以字节流的形式传入 
            InputStream logoStream = new BufferedInputStream(new FileInputStream(this.logoFile)); 
            //转为图片输入流 
            ImageInputStream imageInputStream = ImageIO.createImageInputStream(logoStream); 
            imageReader.setInput(imageInputStream,true); 
            int imageWidth = imageReader.getWidth(0); 
            //固定高度80 
            int imageHeight = 80; 
            //设置左中右和剩下的宽度 
            int leftWidth = imageWidth / 2; 
            int middleWidth = (imageWidth - leftWidth) / 3; 
            int rightWidth = 5; 
            int retainWidth = imageWidth - leftWidth -middleWidth - 5; 
             
            ImageReadParam readParam = imageReader.getDefaultReadParam(); 
            BufferedImage bImage = null; 
            //裁剪左半部分 
            //根据宽和高获得矩形 
            Rectangle leftImageRectangle = new Rectangle(0,leftWidth,imageHeight); 
            readParam.setSourceRegion(leftImageRectangle); 
            bImage = imageReader.read(0,readParam);  
            //字节数组输出流 
            ByteArrayOutputStream leftByteArrayOutputStream = new ByteArrayOutputStream(); 
            ImageIO.write(bImage,suffix,leftByteArrayOutputStream); 
            //获得字节数组 
            byte[] leftImageData = leftByteArrayOutputStream.toByteArray(); 
            leftByteArrayOutputStream.close(); 
            //Hibernate创建一个blob类型 
            Blob leftBlob = Hibernate.createBlob(leftImageData,this.departmentManager.getSession()); 
             
            //裁剪中部部分 
            Rectangle middleImageRectangle = new Rectangle(leftWidth,middleWidth,imageHeight); 
            readParam.setSourceRegion(middleImageRectangle); 
            bImage = imageReader.read(0,readParam); 
             
            ByteArrayOutputStream middleArrayOutputStream = new ByteArrayOutputStream(); 
            ImageIO.write(bImage,middleArrayOutputStream); 
            byte[] middleImageData = middleArrayOutputStream.toByteArray(); 
            middleArrayOutputStream.close(); 
            Blob middleBlob = Hibernate.createBlob(middleImageData,this.departmentManager.getSession()); 
             
            //裁剪右半部分 
            Rectangle rightImageRectangle = new Rectangle(leftWidth + middleWidth,rightWidth,imageHeight); 
            readParam.setSourceRegion(rightImageRectangle); 
            bImage = imageReader.read(0,readParam); 
             
            ByteArrayOutputStream rightArrayOutputStream = new ByteArrayOutputStream(); 
            ImageIO.write(bImage,rightArrayOutputStream); 
            byte[] rightImageData = rightArrayOutputStream.toByteArray(); 
            rightArrayOutputStream.close(); 
            Blob rightBlob = Hibernate.createBlob(rightImageData,this.departmentManager.getSession()); 
             
            //保留部分 
            Rectangle retainRectangle = new Rectangle(leftWidth + middleWidth + rightWidth,retainWidth,imageHeight); 
            readParam.setSourceRegion(retainRectangle); 
            bImage = imageReader.read(0,readParam); 
             
            ByteArrayOutputStream retainArrayOutputStream = new ByteArrayOutputStream(); 
            ImageIO.write(bImage,retainArrayOutputStream); 
            byte[] retainImageData = retainArrayOutputStream.toByteArray(); 
            retainArrayOutputStream.close(); 
            Blob retainBlob = Hibernate.createBlob(retainImageData,this.departmentManager.getSession()); 
             
            if(!departId.equals("") && departId!=null){ 
                Department d = this.departmentManager.findById(Long.valueOf(departId)) ; 
                if(this.checkedAuthIds != null){ 
                    for(int i=0;i<checkedAuthIds.size();i++){ 
                        Menu menu = new Menu() ; 
                        menu.setId(checkedAuthIds.get(i)) ; 
                        listMenu.add(menu) ; 
                    } 
                    d.setMenus(listMenu) ; 
                } 
                d.getDepartmentLogo().setLeftPartImage(leftBlob); 
                d.getDepartmentLogo().setMiddlePartImage(middleBlob); 
                d.getDepartmentLogo().setRightPartImage(rightBlob); 
                d.getDepartmentLogo().setRetainPartImage(retainBlob); 
                d.getDepartmentLogo().setCreateTime(new Date()); 
                d.getDepartmentLogo().setSuffix(suffix); 
                d.setName(departName) ; 
                d.setParentId(0L) ; 
                d.setNodeType(1) ; 
                d.setGrade(1) ; 
                d.setCompany(company) ; 
                this.departmentManager.save(d) ; 
            }else{ 
                Integer parentNodeType = 0 ; 
                Department dd = new Department() ; 
                if(this.checkedAuthIds!=null && this.checkedAuthIds.size() != 0){ 
                    for(int i=0;i<checkedAuthIds.size();i++){ 
                        Menu menu = new Menu() ; 
                        menu.setId(checkedAuthIds.get(i)) ; 
                        listMenu.add(menu) ; 
                    } 
                    dd.setMenus(listMenu) ; 
                }else{ 
                    dd.setMenus(null) ; 
                } 
                DepartmentLogo departmentLogo = new DepartmentLogo() ; 
                departmentLogo.setCreateTime(new Date()); 
                departmentLogo.setLeftPartImage(leftBlob); 
                departmentLogo.setMiddlePartImage(middleBlob); 
                departmentLogo.setRightPartImage(rightBlob); 
                departmentLogo.setRetainPartImage(retainBlob); 
                departmentLogo.setSuffix(suffix); 
                dd.setDepartmentLogo(departmentLogo); 
                dd.getDepartmentLogo().setDepartment(dd); 
                dd.setId(this.departmentManager.findMaxId()+1) ; 
                dd.setName(departName) ; 
                dd.setParentId(0L) ; 
                dd.setNodeType(1) ; 
                dd.setGrade(1) ; 
                dd.setOrderType(0) ; 
                dd.setCompany(company) ; 
                dd.setFlag(0) ; 
                this.departmentManager.save(dd) ; 
            } 
        } 
        return "reload"; 
}

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读