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

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

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

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    GIF解碼和編碼操作庫源碼

     
     

    GIF解碼和編碼操作庫源碼,共有四個類文件(請下載):

    1.AnimatedGifEncoder.java
    2.GifDecoder.java
    3.LZWEncoder.java
    4.NeuQuant.java
    簡單應用: 

    import javax.imageio.ImageIO;
    import java.io.*;
    import java.awt.image.*;
    public class Testgif{
     public static void main(String args[]){
       try{
             BufferedImage src = ImageIO.read(new File("c:/work/1.jpg")); // 讀入文件
             BufferedImage src1 = ImageIO.read(new File("c:/work/2.jpg")); // 讀入文件
             BufferedImage src2 = ImageIO.read(new File("c:/work/3.jpg")); // 讀入文件
                        AnimatedGifEncoder e = new AnimatedGifEncoder();
                        e.setRepeat(0);
                        e.start("c:/work/laoma.gif");
                        e.setDelay(3000);   // 1 frame per sec
                        e.addFrame(src);
                        e.setDelay(1000);
                        e.addFrame(src1);
                        e.setDelay(100);
                        e.addFrame(src2);
                        e.finish();
                }catch(IOException e){
                    e.printStackTrace();
                } 
     }
    }

    下面的例子來自:http://blog.csdn.net/ideas/archive/2006/08/25/1116198.aspx作者: ideas
    1 多張jpg圖合成gif動畫

    /**
         * 把多張jpg圖片合成一張
         * @param pic String[] 多個jpg文件名 包含路徑
         * @param newPic String 生成的gif文件名 包含路徑
         */ 

     private synchronized void jpgToGif(String pic[], String newPic)  {
            try  {
                AnimatedGifEncoder e = new AnimatedGifEncoder(); 
                e.setRepeat(0);
                e.start(newPic);
                BufferedImage src[] = new BufferedImage[pic.length];
                for (int i = 0; i < src.length; i++)  {
                    e.setDelay(200); //設置播放的延遲時間
                    src[i] = ImageIO.read(new File(pic[i])); // 讀入需要播放的jpg文件
                    e.addFrame(src[i]);  //添加到幀中
                }
                e.finish();
            } catch (Exception e)  {
                System.out.println( "jpgToGif Failed:");
                e.printStackTrace();
            }
        }
    2 gif動畫分解成多張jpg

        /** *//**
         * 把gif圖片按幀拆分成jpg圖片         
         * @param gifName String 小gif圖片(路徑+名稱)
         * @param path String 生成小jpg圖片的路徑
         * @return String[] 返回生成小jpg圖片的名稱
         */
        private synchronized String[] splitGif(String gifName,String path)  {
            try  {
                GifDecoder decoder = new GifDecoder();
                decoder.read(gifName);
                int n = decoder.getFrameCount(); //得到frame的個數
                String[] subPic = new String[n];
                String tag = this.getTag();
                for (int i = 0; i < n; i++)  {
                    BufferedImage frame = decoder.getFrame(i); //得到幀
                    //int delay = decoder.getDelay(i); //得到延遲時間
                    //生成小的JPG文件
                    subPic[i] = path + String.value(i)+ ".jpg";
                    FileOutputStream out = new FileOutputStream(subPic[i]);
                    ImageIO.write(frame, "jpeg", out);
                    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   
                   encoder.encode(frame); //存盤 
                  out.flush(); 
                   out.close();
                }
                return subPic;
            } catch (Exception e)  {
                System.out.println( "splitGif Failed!");
                e.printStackTrace();
                return null;
            }
        }

    3 根據提供的文字生成jpg圖片

        /** *//**
         * 根據提供的文字生成jpg圖片
         * @param s String  文字
         * @param smallWidth int  每個字的寬度和高度是一樣的
         * @param bgcolor Color  背景色
         * @param fontcolor Color  字色
         * @param fontPath String 字體文件
         * @param jpgname String jpg圖片名
         * @return
         */
        private String createJpgByFont(String s, int smallWidth,Color bgcolor,Color fontcolor,String fontPath,String jpgname) 
     {
            try {                                                                                
                BufferedImage bimage = new BufferedImage(s.length()*smallWidth,
                                                             smallWidth,BufferedImage.TYPE_INT_RGB); 
                Graphics2D g = bimage.createGraphics();
                g.setColor(bgcolor); //背景色
                g.fillRect(0, 0, smallWidth, smallWidth); //畫一個矩形

                //去除鋸齒(當設置的字體過大的時候,會出現鋸齒) 
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 

                g.setColor(fontcolor); //字的顏色
                File file = new File(fontPath);  //字體文件

                //根據字體文件所在位置,創建新的字體對象(此語句在jdk1.5下面才支持)  
                Font font = Font.createFont(Font.TRUETYPE_FONT, file); 
     
               //font.deriveFont(float f)復制當前 Font 對象并應用新設置字體的大小 
                g.setFont(font.deriveFont((float) smallWidth));

                g.drawString(s,0, smallWidth); //在指定坐標除添加文字
                g.dispose();
                FileOutputStream out = new FileOutputStream(jpgname); //指定輸出文件
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
                param.setQuality(50f, true);
                encoder.encode(bimage, param); //存盤
                out.flush();
                out.close();
            } catch (Exception e)  {
                System.out.println( "createJpgByFont Failed!");
                e.printStackTrace();
            }
        }


    4 多張小jpg圖合成一張大JPG圖,在這里對大圖只作寬度限制,不做高度限制

        /** *//**
         * 將多個小圖片合成一張大jpg圖  (小的jpg圖片按照行列順序平鋪)
         * @param smallJPG ArrayList 一組小的jpg圖片
         * @param bigWidth int 大圖寬度
         * @param smallWidth int  單個文字生成的小圖的寬度和高度是一致的
         * @return 
         */
        private void createBigJPG(ArrayList smallJPG, int bigWidth,
                                    int smallHeigh,Color bgColor ,String picName) {
            try {
                if (bigWidth < smallWidth) //如果大圖片的高度比小圖片的高度還小 直接返回
                    return;
                int colCount = bigWidth / smallWidth; //每行放置的字數
                int leftMargin = (int) ((bigWidth - colCount * smallWidth) / 2f); //左邊距
                int rowCount = smallJPG.size();  //小圖行數 
                int setWidth = bigWidth; //每列中間不留空隙,只留左右邊距
                int setHeight = smallWidth * rowCount ; 

                //按照大圖片寬高繪制一個背景圖片
                BufferedImage bufImage = new BufferedImage(setWidth, setHeight,
                        BufferedImage.TYPE_INT_RGB);

                Graphics2D g = bufImage.createGraphics();
                g.setColor(bgColor); //背景的顏色
                g.fillRect(0, 0, setWidth, setHeight);
                int y = 0; //縱坐標
                for (int i = 0; i < rowCount; i++)  { //遍歷每行
                    ArrayList col = (ArrayList) (smallJPG.get(i));
                    int x = leftMargin; //橫坐標  可能會出現左邊距
                    for (int j = 0; j < col.size(); j++)  {
                        String jpgname = (String) (col.get(j));
                        ImageIcon icon = new ImageIcon(jpgname);
                        Image img = icon.getImage();
                        int imgWidth = img.getHeight(null);
                        g.drawImage(img, x, y, null);
                        x += imgWidth;
                    }
                    y += (smallWidth);  
                }
                g.dispose();
                FileOutputStream out = new FileOutputStream(picName);  //指定輸出文件
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  //設置文件格式
                JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufImage); //從圖片緩沖中讀取
                param.setQuality(50f, true);
                encoder.encode(bufImage, param); //存盤
                out.flush();
                out.close();
            } catch (Exception e)  {
                System.out.println( "createBigJPG Failed!");
                e.printStackTrace();    
            }
        }


    注:

    (1)AnimatedGifEncoder和GifDecoder,以及這兩個類涉及到的相關類,在網上搜索一下就可以找到。

    (2)在linux系統下,如果你想支持更多系統外的字體,使用下面兩句話,可以不用為系統添加字體,直接把字體文件拷貝到相應位置即可,但是需要jdk1.5環境。

    File file = new File(fontPath);  //字體文件
    Font font = Font.createFont(Font.TRUETYPE_FONT, file); //根據字體文件所在位置,創建新的字體對象

    如果是jdk1.5以下版本則需要為系統添加字體,因為createFont(int fontFormat, File fontFile) 
    這個方法,是從1.5才開始有的。

    (3)g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
    我在測試中發現,當設置的字體過大的時候,會出現很明星的鋸齒,后來在網上找到了這個解決方法。

    (4)有了以上幾個方法,就可以做出更好看的閃信了。我也是因為需求才寫下這些方法的,美工做了一些熱門詞匯的gif圖片,在短信轉彩信遇到這些詞匯時,要使用提供的圖片替換文字。

    posted on 2007-09-21 11:15 gembin 閱讀(2235) 評論(1)  編輯  收藏

    評論

    # re: GIF解碼和編碼操作庫源碼 2007-09-22 00:13 千里冰封

    不錯,挺實用的  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 另类免费视频一区二区在线观看| 精品成在人线AV无码免费看| 日本亚洲欧洲免费天堂午夜看片女人员| 成人网站免费大全日韩国产| 久久精品国产亚洲AV无码偷窥| 性感美女视频在线观看免费精品| 三级片免费观看久久| 亚洲an天堂an在线观看| 女人张开腿等男人桶免费视频| 国产国产人免费人成成免视频| 亚洲精品乱码久久久久久下载| 国产乱子伦片免费观看中字| 国内精品一级毛片免费看| 亚洲影院天堂中文av色| 在线a亚洲v天堂网2019无码| 三年片在线观看免费大全 | 亚洲av纯肉无码精品动漫| 亚洲精品国产综合久久一线| 最近免费mv在线观看动漫| 亚洲伊人tv综合网色| 免费人成无码大片在线观看| 91九色视频无限观看免费| fc2免费人成在线视频| 亚洲乱码一二三四区乱码| 亚洲国产精品无码久久久蜜芽 | 日本特黄a级高清免费大片| 免费网站看av片| 国产亚洲午夜精品| 亚洲成人免费在线观看| 亚洲日韩小电影在线观看| 夜夜嘿视频免费看| 每天更新的免费av片在线观看| 精品多毛少妇人妻AV免费久久| 亚洲精品无码久久久久秋霞| 久久青青草原亚洲av无码app| 国产亚洲精aa成人网站| 四虎AV永久在线精品免费观看| 国产在线a免费观看| 久久国产色AV免费观看| a级毛片毛片免费观看久潮喷| 十八禁的黄污污免费网站|