最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)上傳圖片進(jìn)行切割的方法

 更新時(shí)間:2015年02月04日 11:34:04   作者:Benjamin_whx  
這篇文章主要介紹了java實(shí)現(xiàn)上傳圖片進(jìn)行切割的方法,以完整實(shí)例形式分析了Java針對(duì)上傳圖片進(jìn)行切割的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了java實(shí)現(xiàn)上傳圖片進(jìn)行切割的方法。分享給大家供大家參考。具體分析如下:

為什么我要進(jìn)行上傳的圖片進(jìn)行切割呢,我這個(gè)項(xiàng)目的圖片是部門logo,每個(gè)部門都可以選擇不同的logo,但是要應(yīng)對(duì)瀏覽器的兼容以及拉伸,我選擇了把一張圖片切成左、中、右和剩下的部分,因?yàn)樽筮吅椭凶兛赡軙?huì)有圖案或者字所以不能拉伸,拉伸的只是右邊的部分,剩下的部分自適應(yīng)就可以了。所以用了javax的ImageReader來(lái)操作。最后以blob類型保存數(shù)據(jù)庫(kù)中。
首先要在form表單里面寫上enctype="multipart/form-data"

復(fù)制代碼 代碼如下:
<form method="post" id="mainForm" action="${ctx }/admin/department!save.action" enctype="multipart/form-data">

下面在表單中寫上上傳組件

復(fù)制代碼 代碼如下:
<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()方法用于檢查圖片是否以規(guī)定格式結(jié)尾以及是否沒(méi)有選擇

復(fù)制代碼 代碼如下:
function checkFile(){ 
         
        var value = $("#logoFile").val(); 
        if(!value){ 
            alert("請(qǐng)選擇您要上傳的圖片!"); 
            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("對(duì)不起,您上傳文件格式有誤,請(qǐng)選擇指定格式的圖片文件上傳"); 
                return false; 
            } 
        } 
}

下面就是進(jìn)行后臺(tái)的save操作了。

復(fù)制代碼 代碼如下:
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(); 
            //把圖片以字節(jié)流的形式傳入 
            InputStream logoStream = new BufferedInputStream(new FileInputStream(this.logoFile)); 
            //轉(zhuǎn)為圖片輸入流 
            ImageInputStream imageInputStream = ImageIO.createImageInputStream(logoStream); 
            imageReader.setInput(imageInputStream, true); 
            int imageWidth = imageReader.getWidth(0); 
            //固定高度80 
            int imageHeight = 80; 
            //設(shè)置左中右和剩下的寬度 
            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; 
            //裁剪左半部分 
            //根據(jù)寬和高獲得矩形 
            Rectangle leftImageRectangle = new Rectangle(0, 0, leftWidth, imageHeight); 
            readParam.setSourceRegion(leftImageRectangle); 
            bImage = imageReader.read(0, readParam);  
            //字節(jié)數(shù)組輸出流 
            ByteArrayOutputStream leftByteArrayOutputStream = new ByteArrayOutputStream(); 
            ImageIO.write(bImage, suffix, leftByteArrayOutputStream); 
            //獲得字節(jié)數(shù)組 
            byte[] leftImageData = leftByteArrayOutputStream.toByteArray(); 
            leftByteArrayOutputStream.close(); 
            //Hibernate創(chuàng)建一個(gè)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中進(jìn)行動(dòng)態(tài)顯示

復(fù)制代碼 代碼如下:
<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方法就是加載圖片的方法

復(fù)制代碼 代碼如下:
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; 
}

當(dāng)然返回的地址應(yīng)該選擇struts2中的type="stream"

復(fù)制代碼 代碼如下:
@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是怎么得到的呢?
實(shí)在加載菜單的時(shí)候得到的,下面是menu中的方法

復(fù)制代碼 代碼如下:
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; 
    } 
}

這樣就完成了一個(gè)上傳顯示功能。

這個(gè)就是我上傳的測(cè)試圖片。

希望本文所述對(duì)大家的Java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • java中的Object類的toSpring()方法

    java中的Object類的toSpring()方法

    這篇文章主要介紹了java中的Object類的toSpring()方法,Object是類層次結(jié)構(gòu)的根,每個(gè)類都可以將Object作為超類。所有類都直接或者間接的繼承自該類,下文相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 淺析Java中Runnable和Thread的區(qū)別

    淺析Java中Runnable和Thread的區(qū)別

    在java中可有兩種方式實(shí)現(xiàn)多線程,一種是繼承Thread類,一種是實(shí)現(xiàn)Runnable接口;Thread類是在java.lang包中定義的。接下來(lái)通過(guò)本文給大家淺析Java中Runnable和Thread的區(qū)別,一起看看吧
    2017-02-02
  • SpringMVC請(qǐng)求數(shù)據(jù)詳解講解

    SpringMVC請(qǐng)求數(shù)據(jù)詳解講解

    Spring MVC 是 Spring 提供的一個(gè)基于 MVC 設(shè)計(jì)模式的輕量級(jí) Web 開發(fā)框架,本質(zhì)上相當(dāng)于 Servlet,Spring MVC 角色劃分清晰,分工明細(xì),本章來(lái)講解SpringMVC如何請(qǐng)求數(shù)據(jù)
    2022-07-07
  • Java web的讀取Excel簡(jiǎn)單實(shí)例代碼

    Java web的讀取Excel簡(jiǎn)單實(shí)例代碼

    下面小編就為大家?guī)?lái)一篇Java web的讀取Excel簡(jiǎn)單實(shí)例代碼。小編覺(jué)挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Java Mybatis框架增刪查改與核心配置詳解流程與用法

    Java Mybatis框架增刪查改與核心配置詳解流程與用法

    MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過(guò)簡(jiǎn)單的 XML 或注解來(lái)配置和映射原始類型、接口和 Java POJO為數(shù)據(jù)庫(kù)中的記錄
    2021-10-10
  • Java8簡(jiǎn)單了解Lambda表達(dá)式與函數(shù)式接口

    Java8簡(jiǎn)單了解Lambda表達(dá)式與函數(shù)式接口

    這篇文章主要介紹了Java8簡(jiǎn)單了解Lambda表達(dá)式與函數(shù)式接口,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 深入Sqlite多線程入庫(kù)的問(wèn)題

    深入Sqlite多線程入庫(kù)的問(wèn)題

    本篇文章是對(duì)Sqlite多線程入庫(kù)的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 如何使用@Value和@PropertySource注入外部資源

    如何使用@Value和@PropertySource注入外部資源

    這篇文章主要介紹了如何使用@Value和@PropertySource注入外部資源的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot基于SpringSecurity表單登錄和權(quán)限驗(yàn)證的示例

    SpringBoot基于SpringSecurity表單登錄和權(quán)限驗(yàn)證的示例

    這篇文章主要介紹了SpringBoot基于SpringSecurity表單登錄和權(quán)限驗(yàn)證的示例。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • maven下載jar包改用阿里云maven庫(kù)的方法

    maven下載jar包改用阿里云maven庫(kù)的方法

    這篇文章主要介紹了maven下載jar包改用阿里云maven庫(kù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01

最新評(píng)論

武城县| 阿拉善右旗| 拜泉县| 土默特左旗| 宁城县| 北碚区| 浑源县| 罗山县| 遵义县| 韩城市| 安徽省| 胶州市| 岳阳市| 息烽县| 河源市| 即墨市| 泰兴市| 准格尔旗| 泗水县| 石城县| 方正县| 姜堰市| 鄂伦春自治旗| 冷水江市| 保靖县| 河津市| 图木舒克市| 仲巴县| 修武县| 营口市| 澄城县| 连城县| 江城| 三门峡市| 江西省| 潞西市| 池州市| 荔波县| 苏尼特左旗| 荥经县| 榆树市|