java实现缩略图和抓屏幕

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * 
 * 纯java API实现图片处理
 * <p>Title:ImageChangeSize</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2010</p>
 * <p>Company: </p>
 * @author 
 * @version 1.0.0
 */
public class ImageChangeSize
{

      public static void main ( String [] args )
            throws InterruptedException
      {
            //测试生成缩略图
            createThumbnail("c:\\555.gif", 200, 200, 100, "c:\\uuuu.jpg");
            //测试捕捉屏幕,每隔一秒捕获一次
            String path = "c:\\screen\\";
            int i = 0;
            for ( ;; )
            {
                  i++;
                  String filepath = path + i + ".jpg";
                  snatchScreen(filepath);
                  Thread.currentThread().sleep(2000);
            }

      }

      /**
       * 处理图片,改变起大小,可进行缩略和放大
       * @param filename 源文件名称
       * @param thumbWidth  处理后宽度
       * @param thumbHeight 处理后高度
       * @param quality     品质 最高100,最小0
       * @param outFilename  输出文件名称
       */
      public static void createThumbnail ( String filename, int thumbWidth, int thumbHeight, int quality, String outFilename )
      {
            Image image = Toolkit.getDefaultToolkit().getImage(filename);
            MediaTracker mediaTracker = new MediaTracker(new Container());
            mediaTracker.addImage(image, 0);
            try
            {
                  mediaTracker.waitForID(0);
                  double thumbRatio = (double) thumbWidth / (double) thumbHeight;
                  int imageWidth = image.getWidth(null);
                  int imageHeight = image.getHeight(null);
                  double imageRatio = (double) imageWidth / (double) imageHeight;
                  if ( thumbRatio < imageRatio )
                  {
                        thumbHeight = (int) ( thumbWidth / imageRatio );
                  }
                  else
                  {
                        thumbWidth = (int) ( thumbHeight * imageRatio );
                  }
                  BufferedImage thumbImage = new BufferedImage(thumbWidth,

                  thumbHeight, BufferedImage.TYPE_INT_RGB);
                  Graphics2D graphics2D = thumbImage.createGraphics();
                  graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                  graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);

                  BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outFilename));
                  JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                  JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
                  quality = Math.max(0, Math.min(quality, 100));
                  param.setQuality((float) quality / 100.0f, false);
                  encoder.setJPEGEncodeParam(param);
                  encoder.encode(thumbImage);
                  out.close();

            }
            catch ( Exception e )
            {
                  e.printStackTrace();
            }
      }

      /**
       * 抓取电脑屏幕
       * @param path
       */
      public static void snatchScreen ( String path )
      {

            Robot robot;

            try
            {

                  robot = new Robot();

                  Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

                  Rectangle rect = new Rectangle(0, 0, d.width, d.height);

                  BufferedImage image = robot.createScreenCapture(rect);

                  ImageIO.write(image, "jpg", new File(path));

            }
            catch ( Exception e )
            {

                  System.out.println("Failed to snatch screen ... ");

                  e.printStackTrace();

            }

      }

}

你可能感兴趣的:(java,C++,c,C#,sun)