一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java實現上傳圖片進行切割的方法

java實現上傳圖片進行切割的方法

2019-12-09 14:43Benjamin_whx JAVA教程

這篇文章主要介紹了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, 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, 0 , middleWidth, imageHeight);  
            readParam.setSourceRegion(middleImageRectangle);  
            bImage = imageReader.read(0, readParam);  
              
            ByteArrayOutputStream middleArrayOutputStream = new ByteArrayOutputStream();  
            ImageIO.write(bImage, suffix, middleArrayOutputStream);  
            byte[] middleImageData = middleArrayOutputStream.toByteArray();  
            middleArrayOutputStream.close();  
            Blob middleBlob = Hibernate.createBlob(middleImageData, this.departmentManager.getSession());  
              
            //裁剪右半部分  
            Rectangle rightImageRectangle = new Rectangle(leftWidth + middleWidth, 0, rightWidth, imageHeight);  
            readParam.setSourceRegion(rightImageRectangle);  
            bImage = imageReader.read(0, readParam);  
              
            ByteArrayOutputStream rightArrayOutputStream = new ByteArrayOutputStream();  
            ImageIO.write(bImage, suffix, rightArrayOutputStream);  
            byte[] rightImageData = rightArrayOutputStream.toByteArray();  
            rightArrayOutputStream.close();  
            Blob rightBlob = Hibernate.createBlob(rightImageData, this.departmentManager.getSession());  
              
            //保留部分  
            Rectangle retainRectangle = new Rectangle(leftWidth + middleWidth + rightWidth, 0, retainWidth, imageHeight);  
            readParam.setSourceRegion(retainRectangle);  
            bImage = imageReader.read(0, readParam);  
              
            ByteArrayOutputStream retainArrayOutputStream = new ByteArrayOutputStream();  
            ImageIO.write(bImage, suffix, 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";  
}

 

下面就是顯示了,我是用的qui,所以在top.jsp上面的css中進行動態顯示

復制代碼代碼如下:
<style type="text/css">  
.welcome-hide{width: 210px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}  
#leftLogo{background: url(${ctx }/admin/department-logo!showLogo.action?position=left) no-repeat;width: ${leftWidth}px;height: 80px;}  
#middleLogo{background: url(${ctx }/admin/department-logo!showLogo.action?position=middle) no-repeat;width: ${middleWidth}px;height: 80px;}  
#rightLogo,#topTableStyle{background: url(${ctx }/admin/department-logo!showLogo.action?position=right) repeat-x;height: 80px;}  
#retainLogo{background: url(${ctx }/admin/department-logo!showLogo.action?position=retain) no-repeat;width: ${retainWidth}px;height: 80px;}  
</style>

 

department-logo!showLogo.action中的showLogo方法就是加載圖片的方法

復制代碼代碼如下:
public String showLogo() {  
          
        HttpServletRequest request = ServletActionContext.getRequest();  
        LoginUser loginUser = (LoginUser)((SecurityContext)request.getSession().  
                getAttribute("SPRING_SECURITY_CONTEXT")).getAuthentication().getPrincipal();  
        List<DepartmentLogo> logos = this.logoManager.findAll();  
        for (DepartmentLogo departmentLogo : logos) {  
            if (loginUser.getUser().getDepartment().getId().equals(departmentLogo.getDepartment().getId())) {  
                String param = request.getParameter("position");  
                Blob blob = null;  
                if (param != null) {  
                    try {  
                        if (param.equals("left")) {  
                            blob = departmentLogo.getLeftPartImage();  
                            imageLogo = blob.getBinaryStream();  
                            return "showLogo";  
                        }else if (param.equals("middle")) {  
                            blob = departmentLogo.getMiddlePartImage();  
                            imageLogo = blob.getBinaryStream();  
                            return "showLogo";  
                        }else if (param.equals("right")) {  
                            blob = departmentLogo.getRightPartImage();  
                            imageLogo = blob.getBinaryStream();  
                            return "showLogo";  
                        }else if (param.equals("retain")) {  
                            blob = departmentLogo.getRetainPartImage();  
                            imageLogo = blob.getBinaryStream();  
                            return "showLogo";  
                        }  
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  
        return null;  
}

 

當然返回的地址應該選擇struts2中的type="stream"

復制代碼代碼如下:
@Results({  
    @Result(name = "showLogo", type = "stream", params = {"contentType", "image/jpeg,"  
            + "image/bmp,image/png,image/gif,image/jpeg",   
            "inputName", "imageLogo", "bufferSize", "4096"})  
})

 

那么top.jsp中的width是怎么得到的呢?
實在加載菜單的時候得到的,下面是menu中的方法

復制代碼代碼如下:
HttpServletRequest request = ServletActionContext.getRequest();  
List<DepartmentLogo> logos = this.logoManager.findAll();  
for (DepartmentLogo departmentLogo : logos) {  
    if (user.getDepartment().getId().equals(departmentLogo.getDepartment().getId())) {  
 request.setAttribute("leftWidth", ImageIO.read(departmentLogo.  
  getLeftPartImage().getBinaryStream()).getWidth());  
 request.setAttribute("middleWidth", ImageIO.read(departmentLogo.  
  getMiddlePartImage().getBinaryStream()).getWidth());  
 request.setAttribute("retainWidth", ImageIO.read(departmentLogo.  
  getRetainPartImage().getBinaryStream()).getWidth());  
 break;  
    }  
}

 

這樣就完成了一個上傳顯示功能。

java實現上傳圖片進行切割的方法

這個就是我上傳的測試圖片。

希望本文所述對大家的Java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久免费看少妇级毛片蜜臀 | 国产老村长足疗店对白 | 欧美精品久久久亚洲 | 虎四免费入口 | 国产麻豆精品免费视频 | jizz女16处 | 1024免费福利永久观看网站 | 91九色jiuse006| 色多多绿巨人视频 | 国产精品四虎在线观看免费 | 极品妖艳许清赵丽全文免费阅读 | 四虎1515hh.com| 国产视频一区二 | 亚洲国产成人精品无码区APP | 精品视频在线免费播放 | 女bbbbxxx孕妇| 特a级片| 韩国黄色片网站 | 国产福利一区二区精品视频 | 羞羞麻豆国产精品1区2区3区 | 好男人好资源在线观看 | 男人把大ji巴放进男人免费视频 | 97色资源| 国产成人亚洲精品乱码在线观看 | 香港三级浴室女警官 | 日本中文字幕在线精品 | 国产高清在线看 | 国产精品免费看久久久香蕉 | freese×video性欧美丝袜 | 日本男男gayxxxxx免费 | 禁漫H天堂免费A漫 | 国产成人精品男人的天堂538 | 亚洲高清影院 | juy799大岛优香在线观看 | 欧美成人二区 | 色天天综合网色鬼综合 | 国内视频一区二区三区 | 国产卡一卡二卡3卡乱码免费 | 青柠影视在线播放观看高清 | 四虎影视最新 | 55夜色66夜亚州精品站 |