亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java 自動生成略縮圖示例代碼

2019-11-26 16:01:40
字體:
來源:轉載
供稿:網友

當你要做一個圖庫的項目時,對圖片大小、像素的控制是首先需要解決的難題。

一、單圖生成略縮圖
單圖經過重新繪制,生成新的圖片。新圖可以按一定比例由舊圖縮小,也可以規定其固定尺寸。
詳細代碼如下:

復制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px">import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.io.File;
import java.io.IOException;
import java.io.FileOutputStream;
import java.util.Map;
public class PicChange {
    /**
     * @param im            原始圖像
     * @param resizeTimes   需要縮小的倍數,縮小2倍為原來的1/2 ,這個數值越大,返回的圖片越小
     * @return              返回處理后的圖像
     */
    public BufferedImage resizeImage(BufferedImage im, float resizeTimes) {
        /*原始圖像的寬度和高度*/
        int width = im.getWidth();
        int height = im.getHeight();
        /*調整后的圖片的寬度和高度*/
        int toWidth = (int) (Float.parseFloat(String.valueOf(width)) / resizeTimes);
        int toHeight = (int) (Float.parseFloat(String.valueOf(height)) / resizeTimes);
        /*新生成結果圖片*/
        BufferedImage result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB);
        result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
        return result;
    }
    /**
     * @param im            原始圖像
     * @param resizeTimes   倍數,比如0.5就是縮小一半,0.98等等double類型
     * @return              返回處理后的圖像
     */
    public BufferedImage zoomImage(BufferedImage im, float resizeTimes) {
        /*原始圖像的寬度和高度*/
        int width = im.getWidth();
        int height = im.getHeight();
        /*調整后的圖片的寬度和高度*/
        int toWidth = (int) (Float.parseFloat(String.valueOf(width)) * resizeTimes);
        int toHeight = (int) (Float.parseFloat(String.valueOf(height)) * resizeTimes);
        /*新生成結果圖片*/
        BufferedImage result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB);
        result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
        return result;
    }
    public boolean writeHighQuality(BufferedImage im, String fileFullPath) {
        try {
            /*輸出到文件流*/
            FileOutputStream newimage = new FileOutputStream(fileFullPath+System.currentTimeMillis()+".jpg");
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
            JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);
            /* 壓縮質量 */
            jep.setQuality(1f, true);
            encoder.encode(im, jep);
           /*近JPEG編碼*/
            newimage.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    public static void main(String[] args) throws Exception{
        String inputFoler = "F://pic" ;
         /*這兒填寫你存放要縮小圖片的文件夾全地址*/
        String outputFolder = "F://picNew//"; 
        /*這兒填寫你轉化后的圖片存放的文件夾*/
        float times = 0.25f;
        /*這個參數是要轉化成的倍數,如果是1就是轉化成1倍*/
        PicChange r = new PicChange();
        File ff = new File("F://pic//Chrysanthemum1.jpg");
        BufferedImage f = javax.imageio.ImageIO.read(ff);
        r.writeHighQuality(r.zoomImage(f,times), outputFolder);

    }
}</SPAN>

當你把上面的代碼移至myEclipse時,可能會在引入一下工具包時出錯。
復制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px">import com.sun.image.codec.</SPAN>

解決方法:只要把Windows - Preferences - Java - Compiler - Errors/Warnings里面的Deprecated and restricted API中的Forbidden references(access rules)選為Warning就可以編譯通過。

二、批量生成略縮圖
批量生成略縮圖,即將已知文件夾中后綴為.jpg 或其他圖片后綴名的文件  統一轉化后 放到 已定的另外文件夾中

復制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px">import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.io.File;
import java.io.IOException;
import java.io.FileOutputStream;
import java.util.Map;
public class ResizeImage {
    /**
     * @param im            原始圖像
     * @param resizeTimes   需要縮小的倍數,縮小2倍為原來的1/2 ,這個數值越大,返回的圖片越小
     * @return              返回處理后的圖像
     */
    public BufferedImage resizeImage(BufferedImage im, float resizeTimes) {
        /*原始圖像的寬度和高度*/
        int width = im.getWidth();
        int height = im.getHeight();
        /*調整后的圖片的寬度和高度*/
        int toWidth = (int) (Float.parseFloat(String.valueOf(width)) / resizeTimes);
        int toHeight = (int) (Float.parseFloat(String.valueOf(height)) / resizeTimes);
        /*新生成結果圖片*/
        BufferedImage result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB);
        result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
        return result;
    }
    /**
     * @param im            原始圖像
     * @param resizeTimes   倍數,比如0.5就是縮小一半,0.98等等double類型
     * @return              返回處理后的圖像
     */
    public BufferedImage zoomImage(BufferedImage im, float resizeTimes) {
        /*原始圖像的寬度和高度*/
        int width = im.getWidth();
        int height = im.getHeight();
        /*調整后的圖片的寬度和高度*/
        int toWidth = (int) (Float.parseFloat(String.valueOf(width)) * resizeTimes);
        int toHeight = (int) (Float.parseFloat(String.valueOf(height)) * resizeTimes);
        /*新生成結果圖片*/
        BufferedImage result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB);
        result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
        return result;
    }
    /**
     * @param path  要轉化的圖像的文件夾,就是存放圖像的文件夾路徑
     * @param type  圖片的后綴名組成的數組
     * @return
    */
    public List<BufferedImage> getImageList(String path, String[] type) throws IOException{
        Map<String,Boolean> map = new HashMap<String, Boolean>();
        for(String s : type) {
            map.put(s,true);
        }
        List<BufferedImage> result = new ArrayList<BufferedImage>();
        File[] fileList = new File(path).listFiles();
        for (File f : fileList) {
            if(f.length() == 0)
                continue;
            if(map.get(getExtension(f.getName())) == null)
                continue;
            result.add(javax.imageio.ImageIO.read(f));
        }
        return result;
    }
    /**
     * 把圖片寫到磁盤上
      * @param im
     * @param path     eg: C://home// 圖片寫入的文件夾地址
      * @param fileName DCM1987.jpg  寫入圖片的名字
      * @return
     */
    public boolean writeToDisk(BufferedImage im, String path, String fileName) {
        File f = new File(path + fileName);
        String fileType = getExtension(fileName);
        if (fileType == null)
            return false;
        try {
            ImageIO.write(im, fileType, f);
            im.flush();
            return true;
        } catch (IOException e) {
            return false;
        }
    }
    public boolean writeHighQuality(BufferedImage im, String fileFullPath) {
        try {
            /*輸出到文件流*/
            FileOutputStream newimage = new FileOutputStream(fileFullPath+System.currentTimeMillis()+".jpg");
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
            JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);
            /* 壓縮質量 */
            jep.setQuality(1f, true);
            encoder.encode(im, jep);
           /*近JPEG編碼*/
            newimage.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    /**
     * 返回文件的文件后綴名
      * @param fileName
      * @return
    */
    public String getExtension(String fileName) {
        try {
            return fileName.split("http://.")[fileName.split("http://.").length - 1];
        } catch (Exception e) {
            return null;
        }
    }
    public static void main(String[] args) throws Exception{
        String inputFoler = "F://pic" ;
         /*這兒填寫你存放要縮小圖片的文件夾全地址*/
        String outputFolder = "F://picNew//"; 
        /*這兒填寫你轉化后的圖片存放的文件夾*/
        float times = 0.25f;
        /*這個參數是要轉化成的倍數,如果是1就是轉化成1倍*/
        ResizeImage r = new ResizeImage();
   List<BufferedImage> imageList = r.getImageList(inputFoler,new String[] {"jpg"});
        for(BufferedImage i : imageList) {
         r.writeHighQuality(r.zoomImage(i,times),outputFolder);
  }
    }
}</SPAN>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
美女久久久久久久久久久| 亚洲一区二区三区四区在线播放| 成人免费激情视频| 美女啪啪无遮挡免费久久网站| 亚洲成人网av| 亚洲黄页视频免费观看| 在线精品国产成人综合| 中文国产成人精品久久一| 日韩免费观看av| 日韩精品极品在线观看| 色哟哟亚洲精品一区二区| 欧美激情第6页| 神马久久久久久| 久久在线免费观看视频| 国产91av在线| 亚洲人成在线播放| 国产一区二区成人| 欧美激情视频在线免费观看 欧美视频免费一| 中文字幕最新精品| 伊人久久综合97精品| 欧美激情精品久久久久久黑人| 2019国产精品自在线拍国产不卡| 欧美视频在线观看免费| 亚洲成人激情在线观看| 国产午夜精品美女视频明星a级| 欧美精品在线网站| 国产精品爽爽爽| 91久久久精品| 亚洲电影免费观看高清完整版| 亚洲欧洲国产伦综合| 色噜噜久久综合伊人一本| 色偷偷91综合久久噜噜| 亚洲欧美国产日韩天堂区| 国产精品丝袜一区二区三区| 精品亚洲一区二区三区四区五区| 亚洲va电影大全| 国产欧美精品久久久| 色偷偷88888欧美精品久久久| 亚洲天堂成人在线视频| 欧美电影免费观看电视剧大全| 伊人伊成久久人综合网站| 97视频在线观看免费高清完整版在线观看| www.欧美精品一二三区| 91精品国产综合久久久久久久久| zzijzzij亚洲日本成熟少妇| 91在线精品播放| 欧美日韩综合视频| 国产精品高潮粉嫩av| 亚洲欧美资源在线| 日韩精品中文字幕有码专区| 国产一区红桃视频| 国产精品欧美风情| 久久精品亚洲热| 欧美亚洲国产视频| 国产精品久久久久77777| 亚洲欧美中文日韩在线| 精品日本美女福利在线观看| 日韩欧美亚洲范冰冰与中字| 92国产精品久久久久首页| 亚洲免费成人av电影| 国产精品福利观看| 性欧美亚洲xxxx乳在线观看| 久久久亚洲福利精品午夜| 欧美成人一区在线| 超薄丝袜一区二区| 6080yy精品一区二区三区| 日韩欧中文字幕| 亚洲无av在线中文字幕| 91在线精品视频| 国产精品视频在线观看| 日韩国产精品亚洲а∨天堂免| 国产亚洲欧美另类中文| 国产日韩中文字幕| 亚洲男人天堂2024| 精品av在线播放| 亚洲欧美日韩一区二区三区在线| 久久精品国产电影| 欧美视频在线看| 亚洲大胆美女视频| 亚洲免费av网址| 久久久久久国产三级电影| 亚洲最新av在线网站| 欧美天堂在线观看| 欧美人与性动交a欧美精品| 亚洲人成在线电影| 国产精品99久久久久久久久| 国产精品欧美风情| 亚洲成av人乱码色午夜| 91免费看视频.| 日韩毛片在线观看| 国产精品久久久久久久电影| 668精品在线视频| 国产精品狠色婷| 97精品国产91久久久久久| yellow中文字幕久久| 欧美大肥婆大肥bbbbb| 欧美日韩中文字幕日韩欧美| 97欧美精品一区二区三区| 日韩av观看网址| 国产精品青青在线观看爽香蕉| 精品成人在线视频| 亚洲精品国产福利| 亚洲天堂网在线观看| 亚洲成人精品久久| 亚洲一区二区黄| 亚洲欧美中文字幕在线一区| 久久99久国产精品黄毛片入口| www.亚洲成人| 欧美日韩国产区| 一级做a爰片久久毛片美女图片| 国产视频一区在线| 久久久国产精品亚洲一区| 久久久久久久一| 在线性视频日韩欧美| 第一福利永久视频精品| 亚洲自拍偷拍一区| 日韩的一区二区| 57pao国产成人免费| 成人免费高清完整版在线观看| 精品一区二区亚洲| 国产日韩欧美在线看| 97在线免费视频| 亚洲精品999| 91欧美激情另类亚洲| 日韩国产欧美区| 国产主播喷水一区二区| 成人中文字幕+乱码+中文字幕| 91精品视频免费观看| 久久免费视频网| 欧美精品第一页在线播放| 午夜精品在线观看| 日韩视频免费观看| 精品欧美国产一区二区三区| 成人黄色网免费| 亚洲国产精品成人精品| 国产精品成人久久久久| 久久这里只有精品99| 精品久久国产精品| 日韩麻豆第一页| 欧美中文字幕在线视频| 俺也去精品视频在线观看| 国产有码在线一区二区视频| 欧美寡妇偷汉性猛交| 国产精品美女网站| 国产偷国产偷亚洲清高网站| 亚洲综合中文字幕在线观看| 成人在线视频网| 国产精品96久久久久久| 高清在线视频日韩欧美| 国产精品偷伦一区二区| 久久综合88中文色鬼| 中文字幕国产亚洲| 在线成人激情视频| 国产精品va在线播放我和闺蜜| 国产精品日韩在线| 国产精品普通话| 国产在线视频一区| 亚洲精品国产电影| 日韩国产精品亚洲а∨天堂免| 国产69精品久久久久久| 成人妇女淫片aaaa视频| 亚洲欧美日韩直播| 国产精品美乳一区二区免费| 久久久精品在线观看|