JAVA版的相册制作程序

  1. 2005-01-13 @ Tag 原创   人气:3219
    2004年底,我换了100万像素的手机,相片多了就不好管理。
    一次,偶然在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");
       }
       html.append("\n\t\t");
       html.append("
    ");
       html.append(input.getName() + "
    ");
       if (row == 2) {
        html.append("\n\t");
       }
       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.append("\n");
      html.append("\n");
      html.append("\n").append(getDirName()).append("");
      html.append("\n");
      html.append("\n\n");
      html.append("\n");
     }
     private void trail() {
      int row = count % 3;
      if (row == 0) {
       html.append("\n\t\t
    ");
      }
      if (row == 1) {
       html.append("\n\t\t");
       html.append("\n\t\t");
      }
      html.append("\n\t");
      html.append("\n
       
    ");
      html.append("\n");
      html.append("\n");
     }
     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 ");
     }
    }

感谢易载提供各种支持!
文章分类