读书人

Java实现缩略图的步骤

发布时间: 2013-09-11 16:26:28 作者: rapoo

Java实现缩略图的方法

赵永恩


 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();  }   } }



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();  }



这是其他地方看来的

读书人网 >编程

热点推荐