kristain

博客园 首页 新随笔 联系 订阅 管理

  java生成缩略图方法一:

package test;
import java.awt.Image;
import java.awt.image.BufferedImage;
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.JPEGImageEncoder;

public class ImageUtil {
    
    public static void main(String[] args) {
        File file = new File("D:/image.JPG");
        try {
            makeSmallImage(file, "d:/image1.jpg");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 生成缩略图
     * @param srcImageFile 源图片文件的File实例      File file = new File("文件名");
     * @param dstImageFileName 待生成的缩略图片完整路径(生成的格式为:image/jpeg);
     * @throws Exception
     */
     public static void makeSmallImage(File srcImageFile,String dstImageFileName) throws Exception {
            FileOutputStream fileOutputStream = null;
            JPEGImageEncoder encoder = null;
            BufferedImage tagImage = null;
            Image srcImage = null;
            try{
                srcImage = ImageIO.read(srcImageFile);
                int srcWidth = srcImage.getWidth(null);//原图片宽度
                int srcHeight = srcImage.getHeight(null);//原图片高度
                int dstMaxSize = 120;//目标缩略图的最大宽度/高度,宽度与高度将按比例缩写
                int dstWidth = srcWidth;//缩略图宽度
                int dstHeight = srcHeight;//缩略图高度
                float scale = 0;
                //计算缩略图的宽和高
                if(srcWidth>dstMaxSize){
                    dstWidth = dstMaxSize;
                    scale = (float)srcWidth/(float)dstMaxSize;
                    dstHeight = Math.round((float)srcHeight/scale);
                }
                srcHeight = dstHeight;
                if(srcHeight>dstMaxSize){
                    dstHeight = dstMaxSize;
                    scale = (float)srcHeight/(float)dstMaxSize;
                    dstWidth = Math.round((float)dstWidth/scale);
                }
                //生成缩略图
                tagImage = new BufferedImage(dstWidth,dstHeight,BufferedImage.TYPE_INT_RGB);
                tagImage.getGraphics().drawImage(srcImage,0,0,dstWidth,dstHeight,null);
                fileOutputStream = new FileOutputStream(dstImageFileName);
                encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);
                encoder.encode(tagImage);
                fileOutputStream.close();
                fileOutputStream = null;
            }finally{
                if(fileOutputStream!=null){
                    try{
                        fileOutputStream.close();
                    }catch(Exception e){
                    }
                    fileOutputStream = null;
                }
                encoder = null;
                tagImage = null;
                srcImage = null;
                System.gc();
            }
        }
}

 

 java生成缩略图方法二:

//使用图像缩略图的java类库,Thumbnailator0.4.1

Thumbnails.of("d:\\image.jpg").size(200, 200).toFile("d:\\image2.jpg"); Thumbnails.of("d:\\image.jpg").size(200, 200).outputQuality(1.0f).toFile("d:\\image3.jpg");

 

  java截图并生成图片

 

public class ScreenCapture { 
//test main 
public static void main(String[] args) throws Exception{ 
  String userdir = System.getProperty("user.dir"); 
  File tempFile = new File("d:","temp.png"); 
  ScreenCapture capture = ScreenCapture.getInstance(); 
  capture.captureImage();  
  JFrame frame = new JFrame(); 
  JPanel panel = new JPanel(); 
  panel.setLayout(new BorderLayout()); 
  JLabel imagebox = new JLabel(); 
  panel.add(BorderLayout.CENTER,imagebox);  
  imagebox.setIcon(capture.getPickedIcon()); 
  capture.saveToFile(tempFile); 
  capture.captureImage(); 
  imagebox.setIcon(capture.getPickedIcon()); 
  frame.setContentPane(panel); 
  frame.setSize(400,300); 
  frame.show(); 
  System.out.println("Over"); 
} 

private ScreenCapture() { 
  
  try{ 
   robot = new Robot(); 
  } 
  catch(AWTException e) { 
   System.err.println("Internal Error: " + e); 
   e.printStackTrace(); 
  }  
  JPanel cp = (JPanel)dialog.getContentPane(); 
  cp.setLayout(new BorderLayout());  
  labFullScreenImage.addMouseListener(new MouseAdapter() { 
    public void mouseReleased(MouseEvent evn) { 
      isFirstPoint = true; 
      pickedImage = fullScreenImage.getSubimage(recX,recY,recW,recH); 
      dialog.setVisible(false);     
    } 
   }); 
   
  labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() { 
    public void mouseDragged(MouseEvent evn) { 
     if(isFirstPoint) { 
      x1 = evn.getX(); 
      y1 = evn.getY(); 
      isFirstPoint = false;  
     } 
     else { 
      x2 = evn.getX(); 
      y2 = evn.getY(); 
      int maxX = Math.max(x1,x2); 
      int maxY = Math.max(y1,y2); 
      int minX = Math.min(x1,x2); 
      int minY = Math.min(y1,y2); 
      recX = minX; 
      recY = minY; 
      recW = maxX-minX; 
      recH = maxY-minY; 
      labFullScreenImage.drawRectangle(recX,recY,recW,recH);    
     } 
    } 
    
    public void mouseMoved(MouseEvent e) { 
     labFullScreenImage.drawCross(e.getX(),e.getY()); 
    } 
   }); 
   
  cp.add(BorderLayout.CENTER,labFullScreenImage); 
  dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); 
  dialog.setAlwaysOnTop(true); 
  dialog.setMaximumSize( 
   Toolkit.getDefaultToolkit().getScreenSize()); 
  dialog.setUndecorated(true); 
  dialog.setSize(dialog.getMaximumSize()); 
  dialog.setModal(true); 
} 
//Singleton Pattern 
public static ScreenCapture getInstance() { 
  return defaultCapturer; 
} 
/**捕捉全屏慕*/ 
public Icon captureFullScreen() { 
  fullScreenImage = robot.createScreenCapture(new Rectangle( 
   Toolkit.getDefaultToolkit().getScreenSize())); 
  ImageIcon icon = new ImageIcon(fullScreenImage); 
  return icon; 
} 
/**捕捉屏幕的一个矫形区域 
  */ 
public void captureImage() { 
  fullScreenImage = robot.createScreenCapture(new Rectangle( 
   Toolkit.getDefaultToolkit().getScreenSize())); 
  ImageIcon icon = new ImageIcon(fullScreenImage); 
  labFullScreenImage.setIcon(icon);  
  dialog.setVisible(true); 
} 
/**得到捕捉后的BufferedImage*/ 
public BufferedImage getPickedImage() { 
  return pickedImage; 
} 
/**得到捕捉后的Icon*/ 
public ImageIcon getPickedIcon() { 
  return new ImageIcon(getPickedImage()); 
} 
/**储存为一个文件,为PNG格式 
  *@deprecated 
  *replaced by saveAsPNG(File file) 
  **/ 
@Deprecated 
public void saveToFile(File file) throws IOException{ 
  ImageIO.write(getPickedImage(),defaultImageFormater,file); 
} 
/**储存为一个文件,为PNG格式*/ 
public void saveAsPNG(File file) throws IOException { 
  ImageIO.write(getPickedImage(),"png",file); 
} 
/**储存为一个JPEG格式图像文件*/ 
public void saveAsJPEG(File file) throws IOException { 
  ImageIO.write(getPickedImage(),"JPEG",file); 
} 

/**写入一个OutputStream*/ 
public void write(OutputStream out) throws IOException{ 
  ImageIO.write(getPickedImage(),defaultImageFormater,out); 
} 

//singleton design pattern 
private static ScreenCapture defaultCapturer = new ScreenCapture(); 
private int x1,y1,x2,y2; 
private int recX,recY,recH,recW; //截取的图像 
private boolean isFirstPoint  = true; 
private BackgroundImage labFullScreenImage = new BackgroundImage(); 
private Robot robot; 
private BufferedImage fullScreenImage; 
private BufferedImage pickedImage; 
private String defaultImageFormater = "png"; 
private JDialog dialog = new JDialog(); 
} 

/**显示图片的Label*/ 
class BackgroundImage extends JLabel{ 
public void paintComponent(Graphics g) { 
  super.paintComponent(g); 
  g.drawRect(x,y,w,h); 
  String area = Integer.toString(w)+" * "+ Integer.toString(h); 
  g.drawString(area,x+(int)w/2-15,y+(int)h/2); 
  g.drawLine(lineX,0,lineX,getHeight()); 
  g.drawLine(0,lineY,getWidth(),lineY); 
} 

public void drawRectangle(int x,int y,int width,int height) { 
  this.x = x; 
  this.y = y; 
  h = height; 
  w = width; 
  repaint(); 
} 

public void drawCross(int x,int y) { 
  lineX = x; 
  lineY = y; 
  repaint(); 
} 

int lineX,lineY; 
int x,y,h,w; 
} 
posted on 2012-05-09 23:23  kristain  阅读(2311)  评论(0编辑  收藏  举报