JAVA实现将上传的图片缩放处理

文章作者 100test 发表时间 2007:10:27 12:50:45
来源 100Test.Com百考试题网


我们经常将一张很大的图片上传到服务器,但是我们有时候需要调用一个很小的图,那么就需要对该图进行缩略处理,今天我们就用java来实现这个效果吧

  下面的程序使用jdk1.4中最新的ImageIO对图片进行读写。使用AffineTransform对图片进行缩放。
  import java.io.File;
  import java.awt.image.BufferedImage;
  import java.awt.Image;
  import java.awt.image.AffineTransformOp;
  import javax.imageio.ImageIO;
  import java.awt.geom.AffineTransform;
  public class UploadImg{
  /**
  * @param fromdir 图片的原始目录
  * @param todir 处理后的图片存放目录
  * @param imgfile 原始图片
  * @param sysimgfile 处理后的图片文件名前缀
  *
  */
  ……
  public boolean CreateThumbnail() throws Exception
  {
  //ext是图片的格式 gif JPG 或png
  String ext="";
  double Ratio=0.0;
  File F = new File(fromdir,imgfile);
  if (!F.isFile())
  throw new Exception(F " is not image file error in CreateThumbnail!");
  //首先判断上传的图片是gif还是JPG ImageIO只能将gif转换为png
  if (isJpg(imgfile)){
  ext="jpg";
  }else{
  ext="png";
  }
  File ThF = new File(todir,sysimgfile "." ext);
  BufferedImage Bi = ImageIO.read(F);
  //假设图片宽 高 最大为120 120
  Image Itemp = Bi.getScaledInstance (120,120,Bi.SCALE_SMOOTH);
  if ((Bi.getHeight()>120) || (Bi.getWidth()>120)){
  if (Bi.getHeight()>Bi.getWidth())
  Ratio = 120.0/Bi.getHeight();
  else
  Ratio = 120.0/Bi.getWidth();
  }
  AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null);
  Itemp = op.filter(Bi, null);
  try {
  ImageIO.write((BufferedImage)Itemp, ext, ThF);
  }catch (Exception ex) {
  throw new Exception(" ImageIo.write error in CreatThum.: " ex.getMessage());
  }
  return (true);
  }
  }
  该程序使用了Java 的AWT,在linux下运行可能报错,有两种解决方式:
  (1) jdk1.4以前版本:需要安装 XFree86和XFree86-Xvfb ,加入 export DISPLAY=hostdomain:0.0
  (2) jdk 1.4以后版本,在执行命令java 加入参数-Djava.awt.headless=true,表示这是一个没有键盘 没有显示器的无头服务器,意称机房托管的服务器。

相关文章


JAVA实现将上传的图片缩放处理
在Hibernate中检索策略的应用
java简单模拟ping和telnet的实现
专业语言:JAVA数组排序
struts开发中遇到的文本框readonly属性
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛