JAVA版的相册制作程序

原创 2006年05月30日 11:38:00
一次,偶然在ZhangLiHai.com上发现了一个相册制作程序,核心功能基本上有了,我只是稍加修改了生成html文件的代码。
在此基础上稍加修改,还可以在相片上追加文字、图片等,各位就根据自己的需要再加工吧!
 

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
 * @author 丁令 Zhanglihai
 *
 * 此程序在Zhanglihai相册制作程序基础上修改而来
 *
 * 程序会在指定目录下生成index.html文件及略缩图目录
 * 具体效果请参见:http://www.dingl.com/photo/dingl/20041219-borland-fb/
 */
public class Zoom {
 String srcPath;
 StringBuffer html;
 int count;
 public Zoom(String srcPath) {
  this.srcPath = srcPath;
  init();
 }
 public void zoom(File input) {
  //输出的位置
  String output = getOutputPath();
  try {
   InputStream imageStream = new FileInputStream(input);
   //根据目标图片建立一个缓存图片
   JPEGImageDecoder decoderFile = JPEGCodec.createJPEGDecoder(imageStream);
   BufferedImage imageFile = decoderFile.decodeAsBufferedImage();
   float zoom = 0.12F; //你要方缩的比例
   //获得目标图片的宽高,同时乘以放缩比例得到新图片大小
   int w = (int) (imageFile.getWidth() * zoom);
   int h = (int) (imageFile.getHeight() * zoom);
   //建立一个新图片的缓存图片
   BufferedImage bufImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
   String zoomFile = output + "/zooms_" + input.getName();
   FileOutputStream out = new FileOutputStream(zoomFile);
   //从目标图片上获得Graphics以便画在新图片上,最后一个参数是内部无名类,可以用null代替
   Graphics g = bufImage.getGraphics();
   g.drawImage(imageFile, 0, 0, w, h, new ImageObserver() {
    public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
     return true;
    }
   });
   //编码输出
   JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(out);
   jpeg.encode(bufImage);
   out.flush();
   out.close();
   imageStream.close();
   int row = count % 3;
   if (row == 0) {
    html.append("/n/t<tr>");
   }
   html.append("/n/t/t<td align='center'><a href='").append(input.getName()).append("' target='_blank'>");
   html.append("<img src='zoom" + "/zooms_" + input.getName() + "' border='0'><br>");
   html.append(input.getName() + "</a></td>");
   if (row == 2) {
    html.append("/n/t</tr>");
   }
   count++;
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 public void process() {
  File[] files = getFiles();
  mkdirs();
  for (int i = 0; i < files.length; i++) {
   zoom(files[i]);
  }
  trail();
  outputHtmlFile();
 }
 private File[] getFiles() {
  File path = new File(srcPath);
  File[] files = path.listFiles(new FileFilter() {
   public boolean accept(File pathname) {
    if (pathname == null)
     return false;
    String ext = pathname.getName().substring(pathname.getName().lastIndexOf(".") + 1).toUpperCase();
    return ext.equals("JPG") || ext.equals("JPEG");
   }
  });
  return files;
 }
 private void mkdirs() {
  File zoomPath = new File(getOutputPath());
  zoomPath.mkdirs();
 }
 private String getOutputPath() {
  return srcPath + "/zoom";
 }
 private void init() {
  count = 0;
  html = new StringBuffer();
  html.append("<html>");
  html.append("/n<head>");
  html.append("/n<meta http-equiv=/"Content-Type/" content=/"text/html; charset=gb2312/">");
  html.append("/n<title>").append(getDirName()).append("</title>");
  html.append("/n</head>");
  html.append("/n/n<body>");
  html.append("/n<table width='75%' border='1'>");
 }
 private void trail() {
  int row = count % 3;
  if (row == 0) {
   html.append("/n/t/t<td>&nbsp;</td>");
  }
  if (row == 1) {
   html.append("/n/t/t<td>&nbsp;</td>");
   html.append("/n/t/t<td>&nbsp;</td>");
  }
  html.append("/n/t</tr>");
  html.append("/n</table>");
  html.append("/n</body>");
  html.append("/n</html>");
 }
 private String getDirName() {
  if (srcPath.endsWith("/")) {
   srcPath = srcPath.substring(0, srcPath.length() - 1);
  }
  return srcPath.substring(srcPath.lastIndexOf("/") + 1);
 }
 private void outputHtmlFile() {
  FileWriter writer = null;
  try {
   File htmlFile = new File(srcPath + "/index.html");
   writer = new FileWriter(srcPath + "/index.html");
   writer.write(html.toString());
   writer.flush();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (writer != null) {
    try {
     writer.close();
    } catch (IOException e1) {
     e1.printStackTrace();
    }
   }
  }
 }
 public static void main(String[] args) {
  String srcPath = args[0];
  if (srcPath==null){
   printHelp();
   return;
  }
  
  Zoom zoom = new Zoom(srcPath);
  zoom.process();
 }
 
 public static void printHelp(){
  System.out.println("USAGE : java Zoom <FILEPATH>");
 }
}

相关文章推荐

Flash相册制作程序

  • 2012年12月11日 17:39
  • 6.28MB
  • 下载

微信小程序示例 - 小相册

小相册是结合腾讯云对象存储服务(Cloud Object Service,简称COS)制作的一个微信小程序示例。在代码结构上包含如下两部分: https://github.com/CFETeam...

PHP相册程序(目录直读版)

  • 2004年08月21日 00:07
  • 0B
  • 下载

一叶飘香相册程序 美化版

  • 2005年05月20日 05:56
  • 0B
  • 下载

HDFS 在Web程序的相册功能开发中的应用

HDFS 在Web程序的相册功能开发中的应用 1、背景:      互联网的应用每时每刻都在产生数据,这些数据长期的积累了长期,使得这些数据文件总量非常庞大,存储这些数据需要投...

使用Three20写iPhone相册程序

刚开始学习iOS。其实连Mac电脑都是第一次摸……从第一天刚用Mac的时候完全不了解快捷键,连Ctrl C V 这种操作都练了好久才熟练。没有Home End什么的真心纠结,连Delete键都没有……...
  • linvan
  • linvan
  • 2012年05月30日 14:20
  • 3442
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA版的相册制作程序
举报原因:
原因补充:

(最多只允许输入30个字)