亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? imageutils.java

?? 個人Blog java編寫的Blog可以直接使用!
?? JAVA
字號:
/*
 *  ImageUtils.java
 *  
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Library General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *  
 *  Author: Winter Lau (javayou@gmail.com)
 *  http://dlog4j.sourceforge.net
 */
package com.liusoft.dlog4j.util;

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.upload.FormFile;

import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifDirectory;
import com.gif4j.GifDecoder;
import com.gif4j.GifEncoder;
import com.gif4j.GifImage;
import com.gif4j.GifTransformer;
import com.liusoft.dlog4j.photo.FileSystemSaver;
import com.liusoft.dlog4j.photo.Photo;

/**
 * 圖像處理工具類
 * TODO: 如果解決圖象經過處理后丟失EXIF的問題。
 * @author liudong
 */
public class ImageUtils {
	
	private static Log log = LogFactory.getLog(FileSystemSaver.class);

	/**
	 * 生成御覽圖
	 * @param orig_img
	 * @param obj_filename
	 * @param p_width
	 * @param p_height
	 * @throws IOException
	 */
	public static String createPreviewImage(InputStream orig_img,
			String obj_filename, int p_width, int p_height) throws IOException {
		String extendName = StringUtils.getFileExtend(obj_filename)
				.toLowerCase();

		FileOutputStream newimage = null;
		InputStream fis = orig_img;
		try {
			if ("gif".equalsIgnoreCase(extendName)) {
				GifImage gifImage = GifDecoder.decode(fis);
				fis.close(); fis = null;
				GifImage newGif = GifTransformer.resize(gifImage, p_width,p_height, false);
				newimage = new FileOutputStream(obj_filename);
				GifEncoder.encode(newGif, newimage);
			} else {
				BufferedImage orig_portrait = (BufferedImage) ImageIO.read(fis);
				fis.close(); fis = null;
				// 統一轉成JPG格式
				BufferedImage bi = new BufferedImage(p_width, p_height,BufferedImage.TYPE_INT_RGB);
				bi.getGraphics().drawImage(orig_portrait, 0, 0, p_width,p_height, null);
				if(!obj_filename.endsWith(".jpg"))
					obj_filename += ".jpg";
				newimage = new FileOutputStream(obj_filename);
				ImageIO.write(bi, "jpg", newimage);
			}
		} finally {
			if (newimage != null)
				newimage.close();
			if (fis != null)
				fis.close();
		}
		return obj_filename;
	}
	
	/**
	 * 將上傳的圖片保存到磁盤中
	 * @param imgFile
	 * @param origionalPath
	 * @throws IOException
	 */
	public static void writeToFile(FormFile imgFile, String origionalPath) throws IOException{
		//保存上傳的文件
		FileOutputStream oldimage = null;
		InputStream fin = null;
		byte[] data = new byte[8192];
		try {
			fin = imgFile.getInputStream();
			oldimage=new FileOutputStream(origionalPath);
			do{
				int rc = fin.read(data);
				if(rc == -1)
					break;
				oldimage.write(data, 0, rc);
				if(rc < data.length)
					break;
			}while(true);
		}finally{
			data = null;
			if(oldimage!=null)
				oldimage.close();
			if(fin!=null)
				fin.close();
		}
	}
	
	/**
	 * 在原照片文件基礎上進行旋轉
	 * @param img_fn
	 * @param orient
	 * @return
	 * @throws IOException
	 */
	public static boolean rotateImage(String img_fn, int orient) throws IOException{
		return rotateImage(img_fn, orient, img_fn);
	}
	
	/**
	 * 根據照片的拍攝對照片進行方向校正
	 * 目前只支持兩種方向的旋轉
	 * 3: 180度
	 * 6: 順時針旋轉90度
	 * 8: 順時針旋轉270度或者逆時針旋轉90度
	 * @param img_fn
	 * @param orient
	 * @throws IOException 
	 */
	public static boolean rotateImage(String img_fn, int orient, String dest_fn) throws IOException{
		double radian = 0;
		switch(orient){
		case 3:
			radian = 180.0;
			break;
		case 6:
			radian = 90.0;
			break;
		case 8:
			radian = 270.0;
			break;
		default:
			return false;
		}
		BufferedImage old_img = (BufferedImage)ImageIO.read(new File(img_fn));	
		int width = old_img.getWidth();
		int height = old_img.getHeight();
		
		BufferedImage new_img = new BufferedImage(height,width,BufferedImage.TYPE_INT_RGB);        
        Graphics2D g2d =new_img.createGraphics();
        
        AffineTransform origXform = g2d.getTransform();
        AffineTransform newXform = (AffineTransform)(origXform.clone());
        // center of rotation is center of the panel
        double xRot = 0;
        double yRot = 0;
		switch(orient){
		case 3:
			xRot = width/2.0;
			yRot = height/2.0;
		case 6:
        	xRot = height/2.0;
        	yRot = xRot;
			break;
		case 8:
        	xRot = width/2.0;
        	yRot = xRot;
        	break;
        default:
        	return false;
		}
        newXform.rotate(Math.toRadians(radian), xRot, yRot); 

        g2d.setTransform(newXform);   
        // draw image centered in panel
        g2d.drawImage(old_img, 0, 0, null);
        // Reset to Original
        g2d.setTransform(origXform);

        FileOutputStream out = new FileOutputStream(dest_fn);
        try{
        	ImageIO.write(new_img, "JPG", out);
        }finally{
        	out.close();
        }
        return true;
	}

	/**
	 * 填充圖片的EXIF信息
	 * @param img_path
	 * @param photo
	 * @return 是否有EXIF信息
	 */
	public static boolean fillExifInfo(String img_path, Photo photo){
		//Reading EXIF
		try {
			Metadata metadata = JpegMetadataReader.readMetadata(new File(img_path));
			if(!metadata.containsDirectory(ExifDirectory.class))
				return false;
			Directory exif = metadata.getDirectory(ExifDirectory.class);
			if(exif!=null){
				if(exif.containsTag(ExifDirectory.TAG_ORIENTATION))
					photo.setOrientation(exif.getInt(ExifDirectory.TAG_ORIENTATION));
				if(exif.containsTag(ExifDirectory.TAG_MAKE))
					photo.setManufacturer(exif.getString(ExifDirectory.TAG_MAKE));
				if(exif.containsTag(ExifDirectory.TAG_MODEL))
					photo.setModel(exif.getString(ExifDirectory.TAG_MODEL));
				if(exif.containsTag(ExifDirectory.TAG_APERTURE))
					photo.setAperture(exif.getDescription(ExifDirectory.TAG_APERTURE));
				if(exif.containsTag(ExifDirectory.TAG_COLOR_SPACE))
					photo.setColorSpace(exif.getDescription(ExifDirectory.TAG_COLOR_SPACE));
				if(exif.containsTag(ExifDirectory.TAG_EXPOSURE_BIAS))
					photo.setExposureBias(exif.getDescription(ExifDirectory.TAG_EXPOSURE_BIAS));
				if(exif.containsTag(ExifDirectory.TAG_FOCAL_LENGTH))
					photo.setFocalLength(exif.getDescription(ExifDirectory.TAG_FOCAL_LENGTH));
				if(exif.containsTag(ExifDirectory.TAG_ISO_EQUIVALENT))
					photo.setISO(exif.getInt(ExifDirectory.TAG_ISO_EQUIVALENT));
				if(exif.containsTag(ExifDirectory.TAG_SHUTTER_SPEED))
					photo.setShutter(exif.getDescription(ExifDirectory.TAG_SHUTTER_SPEED));	
				if(exif.containsTag(ExifDirectory.TAG_EXPOSURE_TIME))
					photo.setExposureTime(exif.getDescription(ExifDirectory.TAG_EXPOSURE_TIME));
				return true;
			}
		} catch (Exception e) {
			log.error("Reading EXIF of "+img_path+" failed.", e);
		}
		return false;
	}

	/**
	 * 判斷是否為圖片
	 * @param extendName
	 * @return
	 */
	public static boolean isImage(String extendName){
		return "png".equalsIgnoreCase(extendName) ||
			   "jpg".equalsIgnoreCase(extendName) ||
			   "jpeg".equalsIgnoreCase(extendName)||
			   "bmp".equalsIgnoreCase(extendName) ||
			   "gif".equalsIgnoreCase(extendName);
	}
	
	/**
	 * 判斷是否為JPG圖片
	 * @param fn
	 * @return
	 */
	public static boolean isJPG(String fn){
		if(fn==null)
			return false;
		String s_fn = fn.toLowerCase();
		return s_fn.endsWith("jpg")||s_fn.endsWith("jpge");
	}

	/**
	 * 判斷是否為JPG圖片
	 * @param fn
	 * @return
	 */
	public static boolean isBMP(String fn){
		if(fn==null)
			return false;
		String s_fn = fn.toLowerCase();
		return s_fn.endsWith("bmp");
	}
	
	public static String BMP_TO_JPG(String imgPath) throws IOException{
		File fOrigionalImage = new File(imgPath);
		BufferedImage oldImage = (BufferedImage)ImageIO.read(fOrigionalImage);
		String jpgName = imgPath+".jpg";
		FileOutputStream newimage = new FileOutputStream(jpgName);
		try{
			if(ImageIO.write(oldImage, "jpg", newimage))
				return jpgName;
		}finally{
			if(newimage!=null)
				newimage.close();
		}
		return null;
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本韩国一区二区三区视频| 久久亚区不卡日本| 精品999久久久| 亚洲少妇30p| 国产成人免费高清| 日韩一级大片在线| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品一区二区视频| 5858s免费视频成人| 亚洲欧美成人一区二区三区| 国产永久精品大片wwwapp| 欧美性淫爽ww久久久久无| 亚洲欧洲av色图| 粉嫩嫩av羞羞动漫久久久| 精品欧美乱码久久久久久1区2区| 一区二区三区不卡视频| av一区二区不卡| 国产免费成人在线视频| 国产一区二区三区日韩| 自拍偷拍亚洲综合| 国产不卡高清在线观看视频| 日韩精品一区二区三区在线| 午夜精品福利在线| 色婷婷综合久色| 亚洲日本在线视频观看| 成人av资源下载| 国产精品伦一区二区三级视频| 国产一区二区三区四区在线观看| 日韩一二在线观看| 九九精品一区二区| 精品处破学生在线二十三| 久久国产精品免费| 精品久久久久久久久久久院品网 | 在线观看一区二区视频| 亚洲天堂福利av| 99久久精品免费看| 亚洲精品你懂的| 在线精品视频一区二区三四| 亚洲色图色小说| 91国产免费观看| 视频精品一区二区| 日韩午夜激情av| 国产一区二区三区在线观看精品| 国产亚洲一区字幕| 97se亚洲国产综合在线| 亚洲精品国产精华液| 精品视频1区2区| 捆绑调教美女网站视频一区| 久久综合色8888| 白白色亚洲国产精品| 一区二区三区欧美日| 欧美美女一区二区在线观看| 日本欧美大码aⅴ在线播放| 欧美va亚洲va国产综合| 成人开心网精品视频| 亚洲免费观看高清| 91精品福利在线一区二区三区| 黄色成人免费在线| 国产精品国产a| 欧美在线不卡一区| 久久99精品久久久久| 国产精品午夜在线观看| 欧美情侣在线播放| 国产精品一二三区在线| 亚洲午夜成aⅴ人片| 精品久久国产97色综合| 99精品欧美一区二区三区综合在线| 一区二区在线观看视频在线观看| 91麻豆精品国产91久久久更新时间| 激情欧美日韩一区二区| 亚洲三级在线观看| 欧美精品一区二区高清在线观看| 高清在线成人网| 日韩精品三区四区| 国产精品欧美综合在线| 91麻豆精品91久久久久同性| 成人在线视频一区二区| 亚洲国产一区二区a毛片| 国产三级精品三级在线专区| 精品视频1区2区| 99久久夜色精品国产网站| 久久综合综合久久综合| 亚洲精品乱码久久久久久久久| 日韩免费看的电影| 色国产精品一区在线观看| 国产真实乱偷精品视频免| 亚洲第一成年网| 亚洲欧美国产高清| 国产精品第五页| 久久久.com| 日韩一区二区在线看片| 欧美性猛交xxxx黑人交| www.一区二区| 国产盗摄女厕一区二区三区| 日本美女视频一区二区| 亚洲一区二区偷拍精品| 中文字幕色av一区二区三区| 久久女同性恋中文字幕| 91精品国产综合久久福利| 色94色欧美sute亚洲线路一久| 高清av一区二区| 国产精品一区专区| 精品在线播放免费| 日本成人超碰在线观看| 亚洲第四色夜色| 亚洲在线成人精品| 亚洲一区二区三区四区在线观看 | 韩日精品视频一区| 免费成人小视频| 麻豆免费精品视频| 日本成人在线一区| 麻豆成人久久精品二区三区小说| 亚洲国产精品人人做人人爽| 亚洲综合视频在线| 亚洲一区二区成人在线观看| 亚洲综合视频在线观看| 亚洲黄色免费电影| 亚洲成人av中文| 日产精品久久久久久久性色| 日韩黄色小视频| 日本视频中文字幕一区二区三区| 免费观看久久久4p| 韩国三级在线一区| 成人av在线电影| 日本黄色一区二区| 欧美男人的天堂一二区| 91精品午夜视频| 亚洲精品在线观看视频| 久久久www成人免费无遮挡大片| 国产视频一区在线播放| 欧美国产精品专区| 一区二区三区中文在线观看| 亚洲成av人片在线观看无码| 日本不卡1234视频| 国产河南妇女毛片精品久久久| 成人性色生活片| 色猫猫国产区一区二在线视频| 欧美日韩一区三区四区| 欧美一区二区三区的| 日韩精品一区二区三区在线播放| 国产欧美日韩视频一区二区| 亚洲人成网站色在线观看| 午夜私人影院久久久久| 极品少妇xxxx偷拍精品少妇| 懂色av一区二区三区免费观看| 99re亚洲国产精品| 欧美日韩在线免费视频| 精品国产伦一区二区三区观看方式| 国产精品久久久久9999吃药| 天天操天天综合网| 国产成人午夜99999| 欧美性色欧美a在线播放| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲欧美日韩久久| 国产在线不卡一区| 欧美日本国产视频| 国产女人aaa级久久久级 | www.成人网.com| 6080yy午夜一二三区久久| 欧美极品少妇xxxxⅹ高跟鞋 | 精品三级在线看| 亚洲人成精品久久久久久| 美女在线视频一区| av不卡一区二区三区| 日韩欧美国产一区在线观看| 亚洲欧洲三级电影| 国产原创一区二区三区| 51午夜精品国产| 亚洲乱码国产乱码精品精可以看 | 国产福利一区在线| 欧美精品久久天天躁| 国产精品蜜臀av| 经典三级视频一区| 欧美一区二视频| 亚洲高清在线精品| av成人动漫在线观看| 久久久久久久性| 美国三级日本三级久久99| 欧美色区777第一页| 亚洲欧美综合色| 国产成人99久久亚洲综合精品| 日韩一区二区电影网| 亚洲成人一二三| 欧美私人免费视频| 亚洲欧美日韩久久| 99国产欧美另类久久久精品| 国产欧美精品区一区二区三区| 麻豆国产欧美一区二区三区| 欧美日韩www| 亚洲成人中文在线| 欧美日韩精品一区二区三区| 亚洲色图在线看| 99精品在线观看视频| 国产精品灌醉下药二区| av不卡在线观看| 亚洲精品videosex极品| 色噜噜狠狠一区二区三区果冻| 亚洲精品日韩综合观看成人91| 91老司机福利 在线| 中文字幕综合网|