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