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

转载于:https://www.cnblogs.com/Jeremy2001/p/6858112.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值