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

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

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

    hyljava

    使用java生成縮略圖

    方法1:[第一種方法比后一種生成的縮略圖要清晰]
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.awt.image.ColorModel;
    import java.awt.image.WritableRaster;
    import java.awt.*;
    import java.awt.geom.AffineTransform;
    import java.io.InputStream;
    import java.io.File;
    import java.io.FileOutputStream;

    public class Test {
     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_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
     g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
     g.dispose();
     return target;
     }
     public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight)
     throws Exception {
     BufferedImage srcImage;
    // String ex = fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());
     String imgType = "JPEG";
     if (fromFileStr.toLowerCase().endsWith(".png")) {
     imgType = "PNG";
     }
    // System.out.println(ex);
     File saveFile=new File(saveToFileStr);
     File fromFile=new File(fromFileStr);
     srcImage = ImageIO.read(fromFile);
     if(width > 0 || hight > 0)
     {
     srcImage = resize(srcImage, width, hight);
     }
     ImageIO.write(srcImage, imgType, saveFile);

     }
     
     public static void main (String argv[]) {
     try{
     //參數1(from),參數2(to),參數3(寬),參數4(高)
     Test.saveImageAsJpg("E:/Document/My Pictures/3.gif","c:/6.gif",50,50);
     } catch(Exception e)
     {
     e.printStackTrace();
     }

     }
    }

    方法2:
     import java.io.*;
     import java.util.*;
     import com.sun.image.codec.jpeg.*;
     import java.awt.image.*;
     import java.awt.*;
     import java.net.*;
     import java.applet.*;
     import java.sql.*;

    //縮略圖類,
    //本java類能將jpg圖片文件,進行等比或非等比的大小轉換。
    //具體使用方法
    //s_pic(大圖片路徑,生成小圖片路徑,大圖片文件名,生成小圖片文名,生成小圖片寬度,生成小圖片高度,是否等比縮放(默認為true))
     public class Tes {
     String InputDir; //輸入圖路徑
     String OutputDir; //輸出圖路徑
     String InputFileName; //輸入圖文件名
     String OutputFileName; //輸出圖文件名
     int OutputWidth = 80; //默認輸出圖片寬
     int OutputHeight = 80; //默認輸出圖片高
     int rate = 0;
     boolean proportion = true; //是否等比縮放標記(默認為等比縮放)

     public Tes() {
    //初始化變量
     InputDir = "";
     OutputDir = "";
     InputFileName = "";
     OutputFileName = "";
     OutputWidth = 80;
     OutputHeight = 80;
     rate = 0;
     }

     public void setInputDir(String InputDir) {
     this.InputDir = InputDir;
     }

     public void setOutputDir(String OutputDir) {
     this.OutputDir = OutputDir;
     }

     public void setInputFileName(String InputFileName) {
     this.InputFileName = InputFileName;
     }

     public void setOutputFileName(String OutputFileName) {
     this.OutputFileName = OutputFileName;
     }

     public void setOutputWidth(int OutputWidth) {
     this.OutputWidth = OutputWidth;
     }

     public void setOutputHeight(int OutputHeight) {
     this.OutputHeight = OutputHeight;
     }

     public void setW_H(int width, int height) {
     this.OutputWidth = width;
     this.OutputHeight = height;
     }

     public String s_pic() {
     BufferedImage image;
     String NewFileName;
    //建立輸出文件對象
     File file = new File(OutputDir + OutputFileName);
     FileOutputStream tempout = null;
     try {
     tempout = new FileOutputStream(file);
     } catch (Exception ex) {
     System.out.println(ex.toString());
     }
     Image img = null;
     Toolkit tk = Toolkit.getDefaultToolkit();
     Applet app = new Applet();
     MediaTracker mt = new MediaTracker(app);
     try {
     img = tk.getImage(InputDir + InputFileName);
     mt.addImage(img, 0);
     mt.waitForID(0);
     } catch (Exception e) {
     e.printStackTrace();
     }

     if (img.getWidth(null) == -1) {
     System.out.println(" can't read,retry!" + "<BR>");
     return "no";
     } else {
     int new_w;
     int new_h;
     if (this.proportion == true) { //判斷是否是等比縮放.
    //為等比縮放計算輸出的圖片寬度及高度
     double rate1 = ((double) img.getWidth(null)) /
     (double) OutputWidth + 0.1;
     double rate2 = ((double) img.getHeight(null)) /
     (double) OutputHeight + 0.1;
     double rate = rate1 > rate2 ? rate1 : rate2;
     new_w = (int) (((double) img.getWidth(null)) / rate);
     new_h = (int) (((double) img.getHeight(null)) / rate);
     } else {
     new_w = OutputWidth; //輸出的圖片寬度
     new_h = OutputHeight; //輸出的圖片高度
     }
     BufferedImage buffImg = new BufferedImage(new_w, new_h,
     BufferedImage.TYPE_INT_RGB);

     Graphics g = buffImg.createGraphics();

     g.setColor(Color.white);
     g.fillRect(0, 0, new_w, new_h);

     g.drawImage(img, 0, 0, new_w, new_h, null);
     g.dispose();

     JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);
     try {
     encoder.encode(buffImg);
     tempout.close();
     } catch (IOException ex) {
     System.out.println(ex.toString());
     }
     }
     return "ok";
     }

     public String s_pic(String InputDir, String OutputDir, String InputFileName,
     String OutputFileName) {
    //輸入圖路徑
     this.InputDir = InputDir;
    //輸出圖路徑
     this.OutputDir = OutputDir;
    //輸入圖文件名
     this.InputFileName = InputFileName;
    //輸出圖文件名
     this.OutputFileName = OutputFileName;
     return s_pic();
     }

     public String s_pic(String InputDir, String OutputDir, String InputFileName,
     String OutputFileName, int width, int height,
     boolean gp) {
    //輸入圖路徑
     this.InputDir = InputDir;
    //輸出圖路徑
     this.OutputDir = OutputDir;
    //輸入圖文件名
     this.InputFileName = InputFileName;
    //輸出圖文件名
     this.OutputFileName = OutputFileName;
    //設置圖片長寬
     setW_H(width, height);
    //是否是等比縮放 標記
     this.proportion = gp;
     return s_pic();
     }

     public static void main(String[] a) {
    //s_pic(大圖片路徑,生成小圖片路徑,大圖片文件名,生成小圖片文名,生成小圖片寬度,生成小圖片高度)
     Tes mypic = new Tes();
     System.out.println(
     mypic.s_pic("E://Document//My Pictures//",
     "E://Document//My Pictures//",
     "topbg-3.gif", "3.gif", 400, 400, true)
     );

     }
     }

    3.jsp方式
    java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,

      try
        {
     java.io.File file = new java.io.File("E://Document//My Pictures//3.gif");
     String newurl="E://Document//My Pictures//32.gif"; //新的縮略圖保存地址
     Image src = javax.imageio.ImageIO.read(file); //構造Image對象
     float tagsize=200;
     int old_w=src.getWidth(null); //得到源圖寬
     int old_h=src.getHeight(null);
     int new_w=0;
     int new_h=0; //得到源圖長
     int tempsize;
     float tempdouble;
     if(old_w>old_h){
     tempdouble=old_w/tagsize;
     }else{
     tempdouble=old_h/tagsize;
     }
     new_w=Math.round(old_w/tempdouble);
     new_h=Math.round(old_h/tempdouble);//計算新圖長寬
     BufferedImage tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
     tag.getGraphics().drawImage(src,0,0,new_w,new_h,null); //繪制縮小后的圖
     FileOutputStream newimage=new FileOutputStream(newurl); //輸出到文件流
     JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
     encoder.encode(tag); //近JPEG編碼
     newimage.close();

    }catch (Exception e){

    e.toString();

    }

    posted on 2012-11-16 15:41 何云隆 閱讀(284) 評論(0)  編輯  收藏 所屬分類: java

    主站蜘蛛池模板: 国产一区二区视频免费| 日韩免费高清一级毛片在线| 77777亚洲午夜久久多喷| 亚洲精品国产高清不卡在线| 午夜网站免费版在线观看| 久9久9精品免费观看| 国产精品免费观看视频| 在线观看亚洲免费视频| 亚洲夂夂婷婷色拍WW47| 亚洲第一福利视频| 亚洲AV无码乱码国产麻豆| 亚洲av无码乱码在线观看野外| 女人18毛片免费观看| 成人在线免费看片| 精品久久8x国产免费观看| 国产成人精品无码免费看| 日本在线看片免费| 久久免费观看国产精品| 91禁漫免费进入| 18勿入网站免费永久| 精品国产免费观看| 免费一级毛片在级播放| 国产亚洲精久久久久久无码AV| 亚洲精品高清在线| 久久亚洲国产视频| 亚洲国产成人va在线观看网址| 亚洲最大天堂无码精品区| 日韩在线视精品在亚洲| 久久久久久久久久久免费精品 | 中文字幕日本人妻久久久免费| 久久国产精品一区免费下载| 蜜臀AV免费一区二区三区| 日韩毛片免费无码无毒视频观看| 成人毛片免费在线观看| 亚洲另类激情综合偷自拍图| 亚洲短视频在线观看| 美女巨胸喷奶水视频www免费| 18禁无遮挡无码国产免费网站| 免费国产综合视频在线看| 久久精品7亚洲午夜a| 日韩一级片免费观看|