Googleが提供するThumbnailsの画像に対する各種操作(スケーリング、ウォーターマーク、反転、変換ピクチャフォーマット)の性能はjdkよりN倍良く、圧縮された画像はより鮮明です。

6947 ワード

jar  :http://code.google.com/p/thumbnailator/
  :thumbnailator-0.4.8.jar
 
  
package com.lvmama.comm.utils.pic;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

@SuppressWarnings("restriction")
public class ImageUtil2 {
	
	/**
     *     (        )
     * @param srcImageFile        
     * @param result         
     * @param height       
     * @param width       
	 * @throws IOException 
     * @isPHP_PC php pc   
     * @isPHP_MOBILE php        
     */
    public final static void scale(String srcImageFile, String newImageFile, int width,int height, boolean isPHP_PC,boolean isPHP_MOBILE) throws IOException {
        Image img = ImageIO.read(new File(srcImageFile));
        int newWidth = img.getWidth(null),newHeight = img.getHeight(null);
        
        //     
        if(isPHP_MOBILE && !isPHP_PC && img.getWidth(null) <= width){
        	//     ,        ,     
        }else if ((img.getHeight(null) > height) || (img.getWidth(null) > width)) {
        	
        	if(isPHP_PC && !isPHP_MOBILE){//PHP    PC          (      )   
                if(img.getWidth(null) > img.getHeight(null)){
                	newWidth = width;
                	newHeight = (int)(new Integer(width).doubleValue()/img.getWidth(null)*img.getHeight(null));
                }else{
                	newHeight = height;
                	newWidth = (int)(new Integer(height).doubleValue()/img.getHeight(null)*img.getWidth(null));
                }
            	
            }else if(isPHP_MOBILE && !isPHP_PC){//PHP    (  )          
            	newWidth = width;
            	newHeight = (int)(new Integer(width).doubleValue()/img.getWidth(null)*img.getHeight(null));
            	
            }else {//vst :   /    >    /       ?    /   :   /    ,           
            	//         
                double ratio_height = (new Integer(height)).doubleValue()/ img.getHeight(null);
                double ratio_width = (new Integer(width)).doubleValue() / img.getWidth(null);
                
                if(ratio_height>ratio_width){
                	newHeight = height;
                	newWidth = (int)((new Integer(height)).doubleValue()/ img.getHeight(null) * img.getWidth(null));
                }else{
                	newWidth = width;
                	newHeight = (int)((new Integer(width)).doubleValue() / img.getWidth(null) * img.getHeight(null));
                }
            }
        }
        
    	Thumbnails.of(srcImageFile)
    	.size(newWidth, newHeight)
    	.toFile(newImageFile);
        
    }
	
	/**
	 *       
	 * 
	 * @param targetImg
	 *                  , :C:\\myPictrue\\1.jpg
	 * @param waterImg
	 *                  , :C:\\myPictrue\\logo.png
	 * @param positions         
	 * 
	 * @param alpha
	 *               (0.0 -- 1.0, 0.0     ,1.0      ) * @param quality      
	 *               1.0
	 * @throws IOException 
	 */
	public final static void pressImage(String targetImg, File waterImg, Positions positions, float alpha) throws IOException {
		Thumbnails.of(targetImg)
		.watermark(positions, ImageIO.read(waterImg), alpha)
		.scale(1)//    
		.toFile(targetImg);
	}

	/**
	 *          
	 * 
	 * @param pressImg
	 *            --     
	 * @param targetImg
	 *            --     
	 * @param alpha
	 *               (0.0 -- 1.0, 0.0     ,1.0      ) * @param quality      
	 *               1.0
	 *            
	 * @throws IOException 
	 */
	public final static void pressImage(String targetImg, String pressImg,float alpha) throws IOException {
		Thumbnails.of(targetImg)
		.watermark(Positions.TOP_LEFT, ImageIO.read(new File(pressImg)), alpha)
		.outputQuality(1)//    100%
		.scale(1)//    
		.toFile(targetImg);
	}

	/**
	 *          
	 * 
	 * @param pressImg
	 *            --     
	 * @param targetImg
	 *            --     
	 * @param position
	 * 
	  @param alpha
	 *               (0.0 -- 1.0, 0.0     ,1.0      ) * @param quality      
	 *               1.0
	 * 
	 * @throws IOException 
	 */
	public final static void pressImage(String targetImg, String pressImg, Positions position,float alpha) throws IOException {
		Thumbnails.of(targetImg)
		.watermark(position, ImageIO.read(new File(pressImg)), alpha)
		.outputQuality(1)//    100%
		.scale(1)//    
		.toFile(targetImg);
	}

	/**
	 *     
	 * @throws IOException
	 */
	public static void region(String sourceImg,String newImgPath,int x,int y,int width,int height) throws IOException{
	    //      
	    Thumbnails.of(sourceImg)  
	    .sourceRegion(x, y, width, height)//x 、y ,   、   
	    .size(width, height)//           
	    //         false,          true,          
	    .keepAspectRatio(false) 
	    .toFile(newImgPath);
	}
	
	/**
	 *     
	 * @param sourceImage    
	 * @param newImage       
	 * @param degrees     
	 * @throws IOException
	 */
	public static void rorate(String sourceImage,String newImage,double degrees) throws IOException{
		Thumbnails.of(sourceImage)
		.rotate(degrees)//    
		.scale(1)//    
		.toFile(newImage);
	}
	
	/**
	 *       
	 * @param sourceImg    
	 * @param newImg          
	 * @param format	  
	 * @throws IOException
	 */
	public static void transferImageFormat(String sourceImg,String newImg,String format) throws IOException{
		Thumbnails.of(sourceImg)
		.outputFormat(format)
		.scale(1)
		.toFile(newImg);
	}

	public static void main(String[] args) {
		try {
			//ImageUtil2.scale("C:\\Users\\chengjiangbo\\Desktop\\images\\c743d228-3ecf-4711-9187-725f252d14b1.jpg", "C:\\Users\\chengjiangbo\\Desktop\\images\\480_300.jpg", 480, 300, true, false);
			//ImageUtil2.pressImage("C:\\Users\\chengjiangbo\\Desktop\\images\\IMG_waterImage.jpg", "C:\\Users\\chengjiangbo\\Desktop\\images\\QRCode.png",Positions.BOTTOM_CENTER, 1);
			//ImageUtil2.region("C:\\Users\\chengjiangbo\\Desktop\\images\\IMG_waterImage.jpg", "C:\\Users\\chengjiangbo\\Desktop\\images\\IMG_waterImage123.jpg",0,0,100,100);
			//ImageUtil2.rorate("C:\\Users\\chengjiangbo\\Desktop\\images\\IMG_waterImage.jpg", "C:\\Users\\chengjiangbo\\Desktop\\images\\IMG_waterImage111.jpg", 90);
			ImageUtil2.transferImageFormat("C:\\Users\\chengjiangbo\\Desktop\\images\\QRCode.png", "C:\\Users\\chengjiangbo\\Desktop\\images\\QRCode.jpg", "JPEG");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}