zoukankan      html  css  js  c++  java
  • java获取远程网络图片文件流、压缩保存到本地

    1.获取远程网路的图片

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
         /**
     * 根据地址获得数据的字节流
     *
     * @param strUrl
     *            网络连接地址
     * @return
     */
    public static byte[] getImageFromNetByUrl(String strUrl) {
        try {
            URL url = new URL(strUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5 1000);
            InputStream inStream = conn.getInputStream();// 通过输入流获取图片数据
            byte[] btImg = readInputStream(inStream);// 得到图片的二进制数据
            return btImg;
        catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
       /**
     * 根据地址获得数据的字节流
     *
     * @param strUrl
     *            本地连接地址
     * @return
     */
    public static byte[] getImageFromLocalByUrl(String strUrl) {
        try {
            File imageFile = new File(strUrl);
            InputStream inStream = new FileInputStream(imageFile);
            byte[] btImg = readInputStream(inStream);// 得到图片的二进制数据
            return btImg;
        catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
       /**
     * 从输入流中获取数据
     *
     * @param inStream
     *            输入流
     * @return
     * @throws Exception
     */
    public static byte[] readInputStream(InputStream inStream) throws Exception {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[10240];
        int len = 0;
        while ((len = inStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, len);
        }
        inStream.close();
        return outStream.toByteArray();
    }  

    2.将网络读取的文件流转成本地文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            byte[] btImg1 = ImageUtil.getImageFromNetByUrl(fileUrl1);
    if (null != btImg1 && btImg1.length > 0) {
        logger.debug("读取到:" + btImg1.length + " 字节");
        ImageUtil.writeImageToDisk(btImg1, fileZipUrl1);
    else {
        logger.debug("没有从该连接获得内容");
    }
     
    byte[] btImg2 = ImageUtil.getImageFromNetByUrl(fileUrl2);
    if (null != btImg2 && btImg2.length > 0) {
        logger.debug("读取到:" + btImg2.length + " 字节");
        ImageUtil.writeImageToDisk(btImg2, fileZipUrl2);
    else {
        logger.debug("没有从该连接获得内容");
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    /**
     * 将图片写入到磁盘
     *
     * @param img
     *            图片数据流
     * @param fileName
     *            文件保存时的名称
     */
    public static void writeImageToDisk(byte[] img, String zipImageUrl) {
        try {
            File file = new File(zipImageUrl);
            FileOutputStream fops = new FileOutputStream(file);
            fops.write(img);
            fops.flush();
            fops.close();
            System.out.println("图片已经写入"+zipImageUrl);
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    3、压缩本地图片

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    import java.io.*; 
    import java.util.Date; 
    import java.awt.*; 
    import java.awt.image.*; 
    import javax.imageio.ImageIO; 
    import com.sun.image.codec.jpeg.*; 
    /**
     * 图片压缩处理
     */ 
    public class ImgCompress { 
        private Image img; 
        private int width; 
        private int height;  
        /**
         * 构造函数
         */ 
        public ImgCompress(String fileName) throws IOException { 
            File file = new File(fileName);// 读入文件 
            img = ImageIO.read(file);      // 构造Image对象 
            width = img.getWidth(null);    // 得到源图宽 
            height = img.getHeight(null);  // 得到源图长 
        
        /**
         * 按照宽度还是高度进行压缩
         * @param w int 最大宽度
         * @param h int 最大高度
         */ 
        public void resizeFix(int w, int h) throws IOException { 
            if (width / height > w / h) { 
                resizeByWidth(w); 
            else 
                resizeByHeight(h); 
            
        
        /**
         * 以宽度为基准,等比例放缩图片
         * @param w int 新宽度
         */ 
        public void resizeByWidth(int w) throws IOException { 
            int h = (int) (height * w / width); 
            resize(w, h); 
        
        /**
         * 以高度为基准,等比例缩放图片
         * @param h int 新高度
         */ 
        public void resizeByHeight(int h) throws IOException { 
            int w = (int) (width * h / height); 
            resize(w, h); 
        
        /**
         * 强制压缩/放大图片到固定的大小
         * @param w int 新宽度
         * @param h int 新高度
         */ 
        public void resize(int w, int h) throws IOException { 
            // SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢 
            BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );  
            image.getGraphics().drawImage(img, 00, w, h, null); // 绘制缩小后的图 
            File destFile = new File("C:/Users/Administrator/Desktop/147.jpg"); 
            FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流 
            // 可以正常实现bmp、png、gif转jpg 
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
            encoder.encode(image); // JPEG编码 
            out.close(); 
        }
    1
    2
    3
    4
    5
    6
    7
    @SuppressWarnings("deprecation"
    public static void main(String[] args) throws Exception { 
        System.out.println("开始:" new Date().toLocaleString()); 
        ImgCompress imgCom = new  ImgCompress("C:/Users/Administrator/Desktop/1479209533362.jpg"); 
        imgCom.resizeFix(285380); 
        System.out.println("结束:" new Date().toLocaleString()); 
    }
    1
    }
  • 相关阅读:
    Oracle 实现自动递增的功能
    解决升级chrome导致“Silverlight ”插件失效
    解决笔记:转载篇
    MSP432在CCS上新建工程,导入固件库
    操作系统复习文档
    数据结构
    数据结构
    蓝桥
    ACM山东工商 数据结构与算法 第3章 双向栈的操作
    ACM山东工商 栈和队列算法练习
  • 原文地址:https://www.cnblogs.com/Jeremy2001/p/6858112.html
Copyright © 2011-2022 走看看