<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-57  評論-117  文章-1  trackbacks-0

    支持將Image的寬度、高度縮放到指定width、height,并保存在指定目錄
    通過目標(biāo)對象的大小和標(biāo)準(zhǔn)(指定)大小計算出圖片縮小的比例
    可以設(shè)置圖片縮放質(zhì)量,并且可以根據(jù)指定的寬高縮放圖片

    源碼:

    package com.hoo.util;
     
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import javax.imageio.ImageIO;
    import com.sun.image.codec.jpeg.ImageFormatException;
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGEncodeParam;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
     
    /**
     * <b>function:</b> 縮放圖片工具類,創(chuàng)建縮略圖、伸縮圖片比例
     * @author hoojo
     * @createDate 2012-2-3 上午10:08:47
     * @file ScaleImageUtils.java
     * @package com.hoo.util
     * @blog http://blog.csdn.net/IBM_hoojo
     * http://hoojo.cnblogs.com
     * @email hoojo_@126.com
     * @version 1.0
     */
    public abstract class ScaleImageUtils {
     
        private static final float DEFAULT_SCALE_QUALITY = 1f;
        private static final String DEFAULT_IMAGE_FORMAT = ".jpg"; // 圖像文件的格式 
        private static final String DEFAULT_FILE_PATH = "C:/temp-";
        
        /**
         * <b>function:</b> 設(shè)置圖片壓縮質(zhì)量枚舉類;
         * Some guidelines: 0.75 high quality、0.5  medium quality、0.25 low quality
         * @author hoojo
         * @createDate 2012-2-7 上午11:31:45
         * @file ScaleImageUtils.java
         * @package com.hoo.util
         * @project JQueryMobile
         * @blog http://blog.csdn.net/IBM_hoojo
         * @email hoojo_@126.com
         * @version 1.0
         */
        public enum ImageQuality {
            max(1.0f), high(0.75f), medium(0.5f), low(0.25f);
            
            private Float quality;
            public Float getQuality() {
                return this.quality;
            }
            ImageQuality(Float quality) {
                this.quality = quality;
            }
        }
        
        private static Image image;
        
        /**
         * <b>function:</b> 通過目標(biāo)對象的大小和標(biāo)準(zhǔn)(指定)大小計算出圖片縮小的比例
         * @author hoojo
         * @createDate 2012-2-6 下午04:41:48
         * @param targetWidth 目標(biāo)的寬度
         * @param targetHeight 目標(biāo)的高度
         * @param standardWidth 標(biāo)準(zhǔn)(指定)寬度
         * @param standardHeight 標(biāo)準(zhǔn)(指定)高度
         * @return 最小的合適比例
         */
        public static double getScaling(double targetWidth, double targetHeight, double standardWidth, double standardHeight) {
            double widthScaling = 0d;
            double heightScaling = 0d;
            if (targetWidth > standardWidth) {
                widthScaling = standardWidth / (targetWidth * 1.00d);
            } else {
                widthScaling = 1d;
            }
            if (targetHeight > standardHeight) {
                heightScaling = standardHeight / (targetHeight * 1.00d);
            } else {
                heightScaling = 1d;
            }
            return Math.min(widthScaling, heightScaling);
        }
        
        /**
         * <b>function:</b> 將Image的寬度、高度縮放到指定width、height,并保存在savePath目錄
         * @author hoojo
         * @createDate 2012-2-6 下午04:54:35
         * @param width 縮放的寬度
         * @param height 縮放的高度
         * @param savePath 保存目錄
         * @param targetImage 即將縮放的目標(biāo)圖片
         * @return 圖片保存路徑、名稱
         * @throws ImageFormatException
         * @throws IOException
         */
        public static String resize(int width, int height, String savePath, Image targetImage) throws ImageFormatException, IOException {
            width = Math.max(width, 1);
            height = Math.max(height, 1);
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            image.getGraphics().drawImage(targetImage, 0, 0, width, height, null);
            
            if (savePath == null || "".equals(savePath)) {
                savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
            }
            
            FileOutputStream fos = new FileOutputStream(new File(savePath));
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
            encoder.encode(image);
     
            image.flush();
            fos.flush();
            fos.close();
            
            return savePath;
        }
        
        /**
         * <b>function:</b> 可以設(shè)置圖片縮放質(zhì)量,并且可以根據(jù)指定的寬高縮放圖片
         * @author hoojo
         * @createDate 2012-2-7 上午11:01:27
         * @param width 縮放的寬度
         * @param height 縮放的高度
         * @param quality 圖片壓縮質(zhì)量,最大值是1; 使用枚舉值:{@link ImageQuality}
         *             Some guidelines: 0.75 high quality、0.5  medium quality、0.25 low quality
         * @param savePath 保存目錄
         * @param targetImage 即將縮放的目標(biāo)圖片
         * @return 圖片保存路徑、名稱
         * @throws ImageFormatException
         * @throws IOException
         */
        public static String resize(int width, int height, Float quality, String savePath, Image targetImage) throws ImageFormatException, IOException {
            width = Math.max(width, 1);
            height = Math.max(height, 1);
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            image.getGraphics().drawImage(targetImage, 0, 0, width, height, null);
            
            if (savePath == null || "".equals(savePath)) {
                savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
            }
            
            FileOutputStream fos = new FileOutputStream(new File(savePath));
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
            
            JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(image); 
            if (quality == null || quality <= 0) {
                quality = DEFAULT_SCALE_QUALITY;
            }
            /** 設(shè)置圖片壓縮質(zhì)量 */  
            encodeParam.setQuality(quality, true);  
            encoder.encode(image, encodeParam);  
     
            image.flush();
            fos.flush();
            fos.close();
            
            return savePath;
        }
        
        /**
         * <b>function:</b> 通過指定大小和圖片的大小,計算出圖片縮小的合適大小
         * @author hoojo
         * @createDate 2012-2-6 下午05:53:10
         * @param width 指定的寬度
         * @param height 指定的高度
         * @param image 圖片文件
         * @return 返回寬度、高度的int數(shù)組
         */
        public static int[] getSize(int width, int height, Image image) {
            int targetWidth = image.getWidth(null);
            int targetHeight = image.getHeight(null);
            double scaling = getScaling(targetWidth, targetHeight, width, height);
            long standardWidth = Math.round(targetWidth * scaling);
            long standardHeight = Math.round(targetHeight * scaling);
            return new int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
        }
        
        /**
         * <b>function:</b> 通過指定的比例和圖片對象,返回一個放大或縮小的寬度、高度
         * @author hoojo
         * @createDate 2012-2-7 上午10:27:59
         * @param scale 縮放比例
         * @param image 圖片對象
         * @return 返回寬度、高度
         */
        public static int[] getSize(float scale, Image image) {
            int targetWidth = image.getWidth(null);
            int targetHeight = image.getHeight(null);
            long standardWidth = Math.round(targetWidth * scale);
            long standardHeight = Math.round(targetHeight * scale);
            return new int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
        }
        
        public static int[] getSize(int width, Image image) {
            int targetWidth = image.getWidth(null);
            int targetHeight = image.getHeight(null);
            long height = Math.round((targetHeight * width) / (targetWidth * 1.00f));
            return new int[] { width, Integer.parseInt(String.valueOf(height)) };
        }
        
        public static int[] getSizeByHeight(int height, Image image) {
            int targetWidth = image.getWidth(null);
            int targetHeight = image.getHeight(null);
            long width = Math.round((targetWidth * height) / (targetHeight * 1.00f));
            return new int[] { Integer.parseInt(String.valueOf(width)), height };
        }
        
        /**
         * 
         * <b>function:</b> 將指定的targetFile圖片文件的寬度、高度大于指定width、height的圖片縮小,并保存在savePath目錄
         * @author hoojo
         * @createDate 2012-2-6 下午04:57:02
         * @param width 縮小的寬度
         * @param height 縮小的高度
         * @param savePath 保存目錄
         * @param targetImage 改變的目標(biāo)圖片
         * @return 圖片保存路徑、名稱
         * @throws ImageFormatException
         * @throws IOException
         */
        public static String resize(int width, int height, String savePath, File targetFile) throws ImageFormatException, IOException {
            image = ImageIO.read(targetFile);
            int[] size = getSize(width, height, image);
            return resize(size[0], size[1], savePath, image);
        }
        
        /**
         * 
         * <b>function:</b> 將指定的targetURL網(wǎng)絡(luò)圖片文件的寬度、高度大于指定width、height的圖片縮小,并保存在savePath目錄
         * @author hoojo
         * @createDate 2012-2-6 下午04:57:07
         * @param width 縮小的寬度
         * @param height 縮小的高度
         * @param savePath 保存目錄
         * @param targetImage 改變的目標(biāo)圖片
         * @return 圖片保存路徑、名稱
         * @throws ImageFormatException
         * @throws IOException
         */
        public static String resize(int width, int height, String savePath, URL targetURL) throws ImageFormatException, IOException {
            image = ImageIO.read(targetURL);
            int[] size = getSize(width, height, image);
            return resize(size[0], size[1], savePath, image);
        }
        
        /**
         * <b>function:</b> 將一個本地的圖片文件按照指定的比例進行縮放
         * @author hoojo
         * @createDate 2012-2-7 上午10:29:18
         * @param scale 縮放比例
         * @param savePath 保存文件路徑、名稱
         * @param targetFile 本地圖片文件
         * @return 新的文件名稱
         * @throws ImageFormatException
         * @throws IOException
         */
        public static String resize(float scale, String savePath, File targetFile) throws ImageFormatException, IOException {
            image = ImageIO.read(targetFile);
            int[] size = getSize(scale, image);
            return resize(size[0], size[1], savePath, image);
        }
        
        /**
         * <b>function:</b> 將一個網(wǎng)絡(luò)圖片文件按照指定的比例進行縮放
         * @author hoojo
         * @createDate 2012-2-7 上午10:30:56
         * @param scale 縮放比例
         * @param savePath 保存文件路徑、名稱
         * @param targetFile 本地圖片文件
         * @return 新的文件名稱
         * @throws ImageFormatException
         * @throws IOException
         */
        public static String resize(float scale, String savePath, URL targetURL) throws ImageFormatException, IOException {
            image = ImageIO.read(targetURL);
            int[] size = getSize(scale, image);
            return resize(size[0], size[1], savePath, image);
        }
        
        /**
         * <b>function:</b> 按照固定寬度進行等比縮放本地圖片
         * @author hoojo
         * @createDate 2012-2-7 上午10:49:56
         * @param width 固定寬度
         * @param savePath 保存路徑、名稱
         * @param targetFile 本地目標(biāo)文件
         * @return 返回保存路徑
         * @throws ImageFormatException
         * @throws IOException
         */
        public static String resize(int width, String savePath, File targetFile) throws ImageFormatException, IOException {
            image = ImageIO.read(targetFile);
            int[] size = getSize(width, image);
            return resize(size[0], size[1], savePath, image);
        }
        
        /**
         * <b>function:</b> 按照固定寬度進行等比縮放網(wǎng)絡(luò)圖片
         * @author hoojo
         * @createDate 2012-2-7 上午10:50:52
         * @param width 固定寬度
         * @param savePath 保存路徑、名稱
         * @param targetFile 本地目標(biāo)文件
         * @return 返回保存路徑
         * @throws ImageFormatException
         * @throws IOException
         */
        public static String resize(int width, String savePath, URL targetURL) throws ImageFormatException, IOException {
            image = ImageIO.read(targetURL);
            int[] size = getSize(width, image);
            return resize(size[0], size[1], savePath, image);
        }
        
        /**
         * 
         * <b>function:</b> 按照固定高度進行等比縮放本地圖片
         * @author hoojo
         * @createDate 2012-2-7 上午10:51:17
         * @param height 固定高度
         * @param savePath 保存路徑、名稱
         * @param targetFile 本地目標(biāo)文件
         * @return 返回保存路徑
         * @throws ImageFormatException
         * @throws IOException
         */
        public static String resizeByHeight(int height, String savePath, File targetFile) throws ImageFormatException, IOException {
            image = ImageIO.read(targetFile);
            int[] size = getSizeByHeight(height, image);
            return resize(size[0], size[1], savePath, image);
        }
        
        /**
         * <b>function:</b> 按照固定高度進行等比縮放網(wǎng)絡(luò)圖片
         * @author hoojo
         * @createDate 2012-2-7 上午10:52:23
         * @param height 固定高度
         * @param savePath 保存路徑、名稱
         * @param targetFile 本地目標(biāo)文件
         * @return 返回保存路徑
         * @throws ImageFormatException
         * @throws IOException
         */
        public static String resizeByHeight(int height, String savePath, URL targetURL) throws ImageFormatException, IOException {
            image = ImageIO.read(targetURL);
            int[] size = getSizeByHeight(height, image);
            return resize(size[0], size[1], savePath, image);
        }
        
        /**
         * <b>function:</b>
         * @author hoojo
         * @createDate 2012-2-3 上午10:08:47
         * @param args
         * @throws IOException 
         * @throws MalformedURLException 
         * @throws ImageFormatException 
         */
        public static void main(String[] args) throws ImageFormatException, MalformedURLException, IOException {
            
            System.out.println(ScaleImageUtils.resize(140, 140, null, new URL("http://www.open-open.com/lib/images/logo.jpg")));
            ScaleImageUtils.resize(100, 100, ImageQuality.high.getQuality(), null, ImageIO.read(new URL("http://www.open-open.com/lib/images/logo.jpg")));
        }
    }
     


    作者:hoojo
    出處:
    blog:http://blog.csdn.net/IBM_hoojo
             http://hoojo.cnblogs.com
    本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。


    版權(quán)所有,轉(zhuǎn)載請注明出處 本文出自:
    分享道版權(quán)所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處,謝謝
    posted on 2012-02-08 13:48 hoojo 閱讀(2559) 評論(0)  編輯  收藏 所屬分類: JavaEEJavaSE
    主站蜘蛛池模板: 亚洲人成电影院在线观看| 一区二区视频免费观看| 无码日韩精品一区二区三区免费 | 亚洲啪啪免费视频| 亚洲美女高清一区二区三区| 亚洲综合偷自成人网第页色| 免费国产黄网站在线观看视频 | 亚洲午夜精品一区二区公牛电影院| av网站免费线看| 日韩精品视频免费在线观看| 亚洲宅男天堂a在线| 免费国产在线视频| 国产亚洲精aa成人网站| 亚洲av日韩aⅴ无码色老头| 无码国产精品一区二区免费式影视| 亚洲成A人片在线观看WWW| 人人爽人人爽人人片A免费| 天天看片天天爽_免费播放| 亚洲欧洲日产v特级毛片| 久久青草国产免费观看| 自拍偷自拍亚洲精品被多人伦好爽| 日韩在线视精品在亚洲| 成年女人午夜毛片免费视频| 久久亚洲AV成人无码软件| 国产在线精品免费aaa片| 亚洲中文字幕无码一区 | 免费在线观看亚洲| 亚洲精品动漫免费二区| 91在线品视觉盛宴免费| 亚洲精品电影在线| 91精品国产免费入口| 久久国产亚洲电影天堂| 两个人看www免费视频| 久久久久亚洲AV无码专区桃色| 美女视频黄频a免费大全视频| 精品剧情v国产在免费线观看 | 一本久久a久久精品亚洲| 又黄又大的激情视频在线观看免费视频社区在线 | 久久久久国产亚洲AV麻豆| 免费视频成人国产精品网站| 免费观看午夜在线欧差毛片|