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(); } } }