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

    1.获取远程网路的图片

             /**
    	 * 根据地址获得数据的字节流
    	 * 
    	 * @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;
    	}
           /**
    	 * 根据地址获得数据的字节流
    	 * 
    	 * @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;
    	}
           /**
    	 * 从输入流中获取数据
    	 * 
    	 * @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.将网络读取的文件流转成本地文件

                    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("没有从该连接获得内容");
    		}
    
    	/**
    	 * 将图片写入到磁盘
    	 * 
    	 * @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、压缩本地图片

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

        @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(285, 380);  
            System.out.println("结束:" + new Date().toLocaleString());  
        } 
    } 

     完~

     

      

      

  • 相关阅读:
    SysUtils.UpperCase、SysUtils.LowerCase 大小写转换
    Sql Server 2005 数据库备份还原后出现“受限制用户”问题的解决
    为什么要跪谢
    【基础】C#卸载快捷方式添加
    DataTable 复制 DataRow 出现 “该行已经属于另一个表”错误的解决办法
    将int型转化成五位字符串,前面用0填充
    C#嵌套类的使用方法及特性(转)
    net内存回收与Dispose﹐Close﹐Finalize方法(转)
    sqlhelper中文注释版(转)
    windows2003消息队列的安装
  • 原文地址:https://www.cnblogs.com/fron/p/java-image-20161120.html
Copyright © 2011-2022 走看看