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分別表示目標(biāo)長(zhǎng)和寬
           int type = source.getType();
           BufferedImage target = null;
           double sx = (double) targetW / source.getWidth();
           double sy = (double) targetH / source.getHeight();
           //這里想實(shí)現(xiàn)在targetW,targetH范圍內(nèi)實(shí)現(xiàn)等比縮放。如果不需要等比縮放
           //則將下面的if else語(yǔ)句注釋即可
           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{
           //參數(shù)1(from),參數(shù)2(to),參數(shù)3(寬),參數(shù)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.*;

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

           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;
          //建立輸出文件對(duì)象
           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) { //判斷是否是等比縮放.
          //為等比縮放計(jì)算輸出的圖片寬度及高度
           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;
          //設(shè)置圖片長(zhǎng)寬
           setW_H(width, height);
          //是否是等比縮放 標(biāo)記
           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); //構(gòu)造Image對(duì)象
           float tagsize=200;
           int old_w=src.getWidth(null); //得到源圖寬
           int old_h=src.getHeight(null);
           int new_w=0;
           int new_h=0; //得到源圖長(zhǎng)
           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);//計(jì)算新圖長(zhǎng)寬
           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 何云隆 閱讀(286) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java

          主站蜘蛛池模板: 深水埗区| 吉林市| 鹤庆县| 新乡县| 永吉县| 郸城县| 乡城县| 宕昌县| 上栗县| 满洲里市| 北海市| 双江| 广宗县| 股票| 寻甸| 西安市| 五家渠市| 刚察县| 马关县| 凭祥市| 东乌珠穆沁旗| 曲周县| 塔城市| 安义县| 黄骅市| 三门县| 彝良县| 乐东| 陆川县| 房山区| 郓城县| 富民县| 乡宁县| 普安县| 武清区| 克什克腾旗| 海门市| 武威市| 南通市| 邵武市| 莲花县|