亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

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

2019-11-26 15:18:09
字體:
來源:轉載
供稿:網友

本文實例講述了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">推薦大?。?120×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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩电影在线观看中文字幕| 久久久精品视频在线观看| 午夜精品久久久99热福利| 亚洲精品一区二区三区婷婷月| 欧美午夜精品久久久久久久| 国产一区二区三区中文| 欧美亚洲视频在线看网址| 91精品久久久久久久久久久| 国产丝袜一区二区| 成人av电影天堂| 欧美激情国内偷拍| 超薄丝袜一区二区| 国产一区二区精品丝袜| 色偷偷偷综合中文字幕;dd| 亚洲一区二区在线| 日韩经典中文字幕在线观看| 欧美高清视频在线播放| 亚洲色图25p| 色偷偷av一区二区三区乱| 亚洲午夜未删减在线观看| 中文字幕亚洲综合久久筱田步美| 久久久久国产精品www| 国产亚洲精品久久久| 久久久久久久久久av| 日韩精品高清在线观看| 日韩欧美在线一区| 久久久91精品国产一区不卡| 久热在线中文字幕色999舞| 欧美黄色小视频| 国产91精品黑色丝袜高跟鞋| 亚洲欧洲黄色网| 91高清免费视频| 亚洲第一网中文字幕| 日韩欧美中文在线| 2019中文字幕全在线观看| 国产视频丨精品|在线观看| 欧美精品免费看| 欧美风情在线观看| 欧美国产视频日韩| 自拍偷拍免费精品| 欧美久久精品午夜青青大伊人| 精品国产91久久久久久| 色琪琪综合男人的天堂aⅴ视频| 国产精品日韩一区| 日韩精品中文字幕视频在线| 国产精品十八以下禁看| 日本视频久久久| 国产精品电影一区| 疯狂欧美牲乱大交777| 国产精品午夜一区二区欲梦| 最新91在线视频| 欧美疯狂xxxx大交乱88av| 国产精品wwwwww| 欧美一级成年大片在线观看| 亚洲精品美女久久| 国产精品入口日韩视频大尺度| 日韩一区二区欧美| 91九色国产社区在线观看| 97香蕉久久超级碰碰高清版| 欧美美女15p| 亚洲欧洲日本专区| 精品女同一区二区三区在线播放| 欧美激情图片区| 粉嫩老牛aⅴ一区二区三区| 57pao国产成人免费| 成人免费xxxxx在线观看| 国产成人精品在线| 国产性色av一区二区| 国产精品美女www爽爽爽视频| 成人精品网站在线观看| 亚洲欧美成人在线| 91美女福利视频高清| 色综合久综合久久综合久鬼88| 欧美一区深夜视频| 久久精品电影网站| 日韩精品中文字幕在线| 97国产suv精品一区二区62| 欧美做爰性生交视频| 狠狠久久亚洲欧美专区| 色99之美女主播在线视频| 日韩精品免费在线视频观看| 欧美日韩综合视频网址| 国产精品久久久久久久久久| 亚洲欧美日韩精品| 亚洲欧美日韩一区在线| 5252色成人免费视频| 色狠狠久久aa北条麻妃| 国产一区av在线| 久久久av网站| 亚洲精品有码在线| 国产精品激情自拍| 久久人人爽人人爽人人片av高清| 色婷婷久久一区二区| 日韩精品在线视频美女| 色偷偷av亚洲男人的天堂| 亚洲欧洲av一区二区| 中文字幕久精品免费视频| 日韩h在线观看| 亚洲高清av在线| 久久精品国产91精品亚洲| 日本19禁啪啪免费观看www| 欧美中文字幕视频在线观看| 一本大道亚洲视频| 91久久精品一区| 正在播放国产一区| 亚洲人成在线观看网站高清| 日韩综合视频在线观看| 欧美日本在线视频中文字字幕| 午夜精品久久久久久久久久久久| 亚洲精品免费在线视频| 欧美国产一区二区三区| 欧美另类xxx| 欧美精品999| 欧美丰满老妇厨房牲生活| 色综合亚洲精品激情狠狠| 亚洲美女av在线播放| 亚洲一区二区三区乱码aⅴ蜜桃女| 18久久久久久| 国产女精品视频网站免费| 日韩精品免费在线视频| 国产欧美在线播放| 热99精品里视频精品| 欧美大片免费看| 黄色成人在线播放| 欧美日韩在线另类| 亚洲一区二区三区毛片| 久久免费精品日本久久中文字幕| 欧美视频一区二区三区…| 日韩中文字幕视频在线| 亚洲精美色品网站| 亚洲欧美中文字幕在线一区| 国产欧美一区二区| 精品久久久久久久大神国产| 热re91久久精品国99热蜜臀| 亚洲人成啪啪网站| 久久在线观看视频| 国产精品高潮呻吟久久av野狼| 久久国产精品久久久久久久久久| 91精品国产91久久久久| 最近2019中文字幕一页二页| 欧美第一淫aaasss性| 55夜色66夜色国产精品视频| 91久久国产婷婷一区二区| 亚洲免费视频观看| 9.1国产丝袜在线观看| 2024亚洲男人天堂| 26uuu久久噜噜噜噜| 欧美成人手机在线| 国产黑人绿帽在线第一区| 91精品久久久久久久久久另类| 国产精品久久久久久久久久久久久久| 国产中文字幕亚洲| 亚洲精品动漫久久久久| 欧美成人一二三| 欧美国产极速在线| 免费不卡欧美自拍视频| 国产精品观看在线亚洲人成网| 精品国产美女在线| 午夜精品一区二区三区av| 欧美一级淫片videoshd| 91亚洲精品视频| 久久97精品久久久久久久不卡| 久久资源免费视频| 久久精品国产99国产精品澳门|