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
|
} |