<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    精彩的人生

    好好工作,好好生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks

    java中的圖片處理是很讓人頭疼的一件事情。目前java api中的imageIO可以將gif圖片轉換成png圖片,jpg圖片可以正常轉換。據說gifjpg也是有辦法的,但是將jpg轉成gif,我費了很大的工夫才找到一個很好的解決方案。

     

    首先介紹的是一段很好的縮放圖片的代碼::
    public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
        
    // targetW,targetH分別表示目標長和寬
            int type = source.getType();
            BufferedImage target 
    = null;
            
    double sx = (double) targetW / source.getWidth();
            
    double sy = (double) targetH / source.getHeight();

            
    //這里想實現在targetW,targetH范圍內實現等比縮放。如果不需要等比縮放
            
    //則將下面的if else語句注釋即可
            if(sx>sy)
            
    {
                sx 
    = sy;
                targetW 
    = (int)(sx * source.getWidth());
            }
    else{
                sy 
    = sx;
                targetH 
    = (int)(sy * source.getHeight());
            }


            
    if (type == BufferedImage.TYPE_CUSTOM) //handmade
                ColorModel cm = source.getColorModel();
                WritableRaster raster 
    = cm.createCompatibleWritableRaster(targetW, targetH);
                
    boolean alphaPremultiplied = cm.isAlphaPremultiplied();
                target 
    = new BufferedImage(cm, raster, alphaPremultiplied, null);
            }
     else
                target 
    = new BufferedImage(targetW, targetH, type);
            Graphics2D g 
    = target.createGraphics();
            
    //smoother than exlax:
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);


            g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
            g.dispose();
            
    return target;
        }


    接下來是將InputStream保存為jpg文件
    public static void saveImageAsJpg (InputStream in, File saveFile,int width,int hight)    
                
    throws Exception {
            BufferedImage srcImage;

            srcImage 
    = ImageIO.read(in);

            
    if(width > 0 || hight > 0)
            
    {
                 srcImage 
    = resize(srcImage, width, hight);
            }


            ImageIO.write(srcImage, 
    "JPEG", saveFile);
            in.close();
        }


    參數解釋:

    in::是一個jpg圖片的InputStream

    saveFile::目標文件

    width::目標寬度,如果不需要縮放則置0

    hight::目標高度,如果不需要縮放則置0

     

     

    然后是將InputStream保存為gif文件:
    private static void saveImageAsGif(InputStream in, File fileToSave,int width, int hight)
                
    throws Exception {
            BufferedImage srcImage;

            srcImage 
    = ImageIO.read(in);

            
    if(width>0 && hight >0)
            
    {
                 srcImage 
    = resize(srcImage, width, hight);
            }


            FileOutputStream out 
    = new FileOutputStream(fileToSave);
            GifEncoder encoder 
    = new GifEncoder(srcImage, out);
            encoder.encode();

            in.close();
        }


    參數解釋:

    in::是一個jpg或者gif圖片的InputStream

    saveFile::目標文件

    width::目標寬度,如果不需要縮放則置0

    hight::目標高度,如果不需要縮放則置0

     

    GifEncoder這個類是java api中沒有的,也是我找尋了很久的一個東西。它是Acme.JPM.Encoders.GifEncoder,只要找到這個包,將jpg轉為gif就不是問題了。

     

     

    Jpg圖片使用的是24-bit的編碼,pngpng-24png-8兩種,但是gif8-bit的編碼。如果強行將jpg圖片信息流按字節拆開,轉換成gif圖片,即使使用標準256色,也會出現嚴重的失真。

     

    我曾經使用了gif4j_light_trial_1.0.jar這個包,但是這個包讓我很失望。盡管它可以將多張圖片合成一個動態的gif圖片,但是它是付費的,免費使用期只有一個月。并且,在使用它將jpg圖片轉換成gif圖片之后中間會有一條白色的橫線,不知道這是系統的缺陷還是在費用包中做的手腳。

    posted on 2005-11-27 12:53 hopeshared 閱讀(5054) 評論(17)  編輯  收藏 所屬分類: Java

    Feedback

    # re: 2005.6.12 圖片處理 2005-12-04 17:02 jFresH_MaN
    jdk自帶了對圖片進行codec的包
    是sun.awt.image.codec.*  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2005-12-08 09:47 zz
    您好,我找不到Acme.JPM.Encoders.GifEncoder的下載地址,你能給我一份嗎,jgszz@163.com,多謝  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2005-12-08 21:01 hopeshared
    這個類在openmap.jar中,下載地址是

    http://iron.gps.caltech.edu/trinet_tpp_doc/v1.5/download/openmap.jar  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2006-01-13 20:09 zhangbo2976@hotmail.com
    我試了,將GIF進行縮放只,得到的GIF只顯示第一楨的,
    我找了好多方法進行處理,
    過程是,將GIF一楨一楨進行解碼取出,然后再進行重新生成GIF的圖,
    但這樣處理感覺走了彎路。。。。  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2006-05-15 14:53 路過
    內容不錯,所以特點點了一下你的廣告,回報一下  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2006-05-17 13:48 bghtiaoliangxiaochou@hotmail.com
    你好:

    請教:
    我通過
    URL url= new URL("http://img.us.cyworld.com/image/main/beta_logo.gif");
    獲得了
    InputStream is = url.openStream ();
    我如何才能夠將這個InputStream存儲成本的gif文件!
    希望能夠得到您的幫助!
    謝謝!
      回復  更多評論
      

    # re: 2005.6.12 圖片處理 2006-05-17 15:32 hopeshared
    這個問題其實就是單純的將InputStream保存成文件的問題,晚上給答案(當前時刻手上沒有現成的代碼,呵呵)  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2006-05-18 09:43 bghtiaoliangxiaochou@hotmail.com
    問題已經解決,謝謝!
    還有的個問題:
    請問:Acme.JPM.Encoders.GifEncoder是免費使用的嗎??
      回復  更多評論
      

    # re: 2005.6.12 圖片處理 2006-05-18 13:09 hopeshared
    你要做商業用途?

    這個類是美國一所大學的(挺出名,忘記是哪所了)一個項目中的一個jar附帶的,假如你只是自己做著玩應該沒有問題,但是如果是商業用途,而且是大型的商業項目,需要查一下該jar所屬的lisence是不是能用,避免版權問題

    @bghtiaoliangxiaochou@hotmail.com
      回復  更多評論
      

    # re: 2005.6.12 圖片處理 2006-05-19 10:02 bghtiaoliangxiaochou@hotmail.com
    謝謝你的關注!
    但是怎么才能查到該jar的licence??
      回復  更多評論
      

    # re: 2005.6.12 圖片處理 2006-11-30 19:50 河風
    正在關注這面資料。謝謝  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2007-06-06 16:10 MTeamxg
    URL url= new URL("http://img.us.cyworld.com/image/main/beta_logo.gif");
    和樓上提的問題一樣的,試了半天,不知道怎么解決,幫幫我!謝謝!  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2007-06-06 16:12 MTeamxg
    我的郵箱是:xugang_1231@hotmail.com  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2007-06-06 16:45 MTeamxg
    哈哈,解決,謝謝摟主的帖子?。。№?nbsp; 回復  更多評論
      

    # re: 2005.6.12 圖片處理[未登錄] 2008-05-31 11:44 風子
    謝謝,傳一份給我啊,我的郵箱:zenghouhuang21@163.com  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2013-06-24 15:10 luoweikongjian
    樓主能否給我傳一份openmap.jar包,謝謝,我的郵箱是qiaoyuan1986@163.com  回復  更多評論
      

    # re: 2005.6.12 圖片處理 2013-06-24 15:12 luoweikongjian
    @hopeshared
    沒載下載,麻煩給我傳一份,我的郵箱地址是qiaoyuan1986@163.com  回復  更多評論
      

    主站蜘蛛池模板: 亚洲人成无码网站| 亚洲中文字幕无码中文字在线| 亚洲国产精品久久久久| a在线观看免费网址大全| 亚洲人成无码www久久久| 一级毛片免费不卡| 国产精品亚洲mnbav网站 | 亚洲1234区乱码| 国产成人午夜精品免费视频| 91情国产l精品国产亚洲区| 久久A级毛片免费观看| 亚洲一级在线观看| 巨胸喷奶水视频www网免费| 亚洲成a人片在线观看天堂无码| 四虎成人精品一区二区免费网站| 亚洲精品GV天堂无码男同| vvvv99日韩精品亚洲| 成人av片无码免费天天看| 亚洲av无码av制服另类专区| 99久热只有精品视频免费看| 91亚洲自偷在线观看国产馆| 在线免费观看毛片网站| av电影在线免费看| 亚洲永久中文字幕在线| 午夜成人免费视频| 一级毛片无遮挡免费全部| 亚洲av福利无码无一区二区| 久久久久久精品免费免费自慰| 99久久国产亚洲综合精品| 亚洲AV永久无码精品一区二区国产 | 色吊丝永久在线观看最新免费| 一本久久免费视频| 亚洲精品自在线拍| 国产一区二区三区免费在线观看| 国产一级高青免费| 亚洲偷自拍另类图片二区| 中文字幕亚洲天堂| 国产v精品成人免费视频400条| 午夜在线免费视频| 亚洲一级毛片中文字幕| 亚洲色无码专区在线观看|