トップ 一覧 ping 検索 ヘルプ RSS ログイン

Java サムネイルイメージの作成の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Java サムネイルイメージの作成
[Java]{{category コード片}}

 import java.awt.geom.AffineTransform;
 import java.awt.image.AffineTransformOp;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
 import javax.imageio.ImageIO;
 
 /**
  * サムネイルJpegを生成する
  * @author Yagi Hiroto
  */
 public class ThumnailImageCreater {
   /**
    * InputSteramに関連付けられたイメージ
    * 
    * @param in
    * @param out
    * @param formatName
    * @param rate
    * @throws IOException
    * @throws ImageServiceException
    */
   public void writeThumbNailImage(InputStream in, 
           OutputStream out,
           String formatName, 
           double rate) throws Exception {
 
     BufferedImage image = ImageIO.read(in);
     writeThumbNailImage(out, image, formatName, rate);
   }
 
   /**
    * @param in
    * @param out
    * @param rate
    * @throws IOException
    * @throws ImageServiceException
    */
   public void writeThumbNailImage(InputStream in, 
           OutputStream out,
           double rate) throws Exception {
 
     writeThumbNailImage(in, out, "jpeg", rate);
   }
 
   /**
    * @param in
    * @param out
    * @param width
    * @param height
    * @throws IOException
    * @throws ImageServiceException
    */
   public void writeThumbNailImage(InputStream in, 
           OutputStream out,
           int width,
           int height) throws Exception {
   
     writeThumbNailImage(in, out, "jpeg", width, height);
   }
 
   /**
    * @param in
    * @param out
    * @param formatName
    * @param width
    * @param height
    * @throws IOException
    * @throws ImageServiceException
    */
   public void writeThumbNailImage(InputStream in, 
           OutputStream out,
           String formatName, 
           int width, 
           int height) throws Exception {
   
     BufferedImage image = ImageIO.read(in);
     double rate = calcRatio(width, height, image);
     writeThumbNailImage(out, image, formatName, rate);
   }
 
   /**
    * 指定されたサイズに収まる縮小率を算出する
    * 
    * @param width
    * @param height
    * @param image
    * @return
    */
   private double calcRatio(int width, int height, BufferedImage image) {
     double wRate = (double) width  / (double) image.getWidth();
     double hRate = (double) height / (double) image.getHeight();
     return (wRate < hRate) ? wRate : hRate;
   }
 
   /**
    * @param out
    * @param image
    * @param formatName
    * @param rate
    * @throws IOException
    * @throws ImageServiceException
    */
   public void writeThumbNailImage( OutputStream out, 
                  BufferedImage image,
                  String formatName, 
                  double rate) throws Exception {
   
     BufferedImage shrinkImage = new BufferedImage(
           (int) (image.getWidth() * rate),
           (int) (image.getHeight() * rate), 
           image.getType());
   
     AffineTransformOp atOp = new AffineTransformOp(
           AffineTransform.getScaleInstance(rate, rate), null);
   
     atOp.filter(image, shrinkImage);
     boolean ret = ImageIO.write(shrinkImage, formatName, out);
     if (!ret) {
       throw new Exception("writer not found.");
     }
   }
 
   /**
    * @param args
    */
   public static void main(String[] args) {
 
     if (args.length <= 3) {
       printUsage();
     }
 
     FileInputStream in = null;
     FileOutputStream out = null;
     try {
       String srcFilename = args[0].trim();
       String dstFilename = args[1].trim();
 
       if (srcFilename.equals(dstFilename)) {
         System.out.println("ERROR : 変換前のファイル名と、変換後のファイル名が同じです");
       }
 
       int width = 0;
       int height = 0;
       double ratio = 0.0;
 
       for (int i = 0; i < args.length; i++) {
         if ("-w".equalsIgnoreCase(args[i].trim())) {
           width = Integer.parseInt(args[i + 1]);
         } else if ("-h".equalsIgnoreCase(args[i].trim())) {
           height = Integer.parseInt(args[i + 1]);
         } else if ("-r".equalsIgnoreCase(args[i].trim())) {
           ratio = Double.parseDouble(args[i + 1]);
         }
       } 
       in  = new FileInputStream(new File(srcFilename));
       out = new FileOutputStream(new File(dstFilename));
 
       ThumnailImageCreater me = new ThumnailImageCreater();
 
       if (width > 0 || height > 0) {
         me.writeThumbNailImage(in, out, width, height);
       } else if (ratio > 0) {
         me.writeThumbNailImage(in, out, ratio);
       } else {
         System.out.println("ERROR : サイズが指定されていません");
       }
       System.out.println("完了しました");
 
     } catch (Exception e) {
       e.printStackTrace();
       printUsage();
     } finally {
       try {
         if (in != null)
           in.close();
         if (out != null)
           out.close();
       } catch (Exception e) {
       }
     }
   }
 
   /**
    * 
    */
   private static void printUsage() {
     String usage = "usage ThumNailImage " + "originalfilename "
        + "shrinkfilename " + "[-w width]" + "[-h height]"
        + "[-r ratio]";
     System.out.println(usage);
     System.exit(0);
   }
 }