public static void main(String[] args) {
try {
//图片所在路径
BufferedImage templateImage = ImageIO.read(new File("C:\\Users\\晏丁丁\\Pictures\\图片1.png"))
//原始图片的长度和宽度
int height = templateImage.getHeight()
int width = templateImage.getWidth()
//通过比例压缩
float scale = 0.5f
//通过固定长度压缩
/*int doWithHeight = 100
int dowithWidth = 300*/
//压缩之后的长度和宽度
int doWithHeight = (int) (scale * height)
int dowithWidth = (int) (scale * width)
BufferedImage finalImage = new BufferedImage(dowithWidth, doWithHeight, BufferedImage.TYPE_INT_RGB)
finalImage.getGraphics().drawImage(templateImage.getScaledInstance(dowithWidth, doWithHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null)
//图片输出路径,以及图片名
FileOutputStream fileOutputStream = new FileOutputStream("D:/image/tupian.jpg")
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream)
encoder.encode(finalImage)
fileOutputStream.close()
} catch (IOException e) {
e.printStackTrace()
}
}
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
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
文章知
package javase1.day02\x0d\x0a /**\x0d\x0a * 1)一种字符串压缩算法\x0d\x0a * str ="aaaabbccccddeaaa"\x0d\x0a * 压缩为:"4a2b4c2d1e3a"\x0d\x0a * 原理实现:\x0d\x0a *str = "aaaabbccccddeaaa"\x0d\x0a *\x0d\x0a *c = str.charAt(i)//c是每个字符\x0d\x0a *1) 初始化\x0d\x0a *StringBuilder buf = new StringBuilder()\x0d\x0a *int count = 0;代表相同的字符个数\x0d\x0a *char ch = str.charAt(0)代表正在统计的相同字符'a' \x0d\x0a *2) 从i=1开始迭代每个字符\x0d\x0a * c = str.charAt(i)//c是每个当前字符\x0d\x0a *3) 检查当前字符c与被统计ch是否一致\x0d\x0a *如果一致 count++\x0d\x0a *否则(不一致)\x0d\x0a *向缓冲区buf增加count+ch\x0d\x0a *count=0,ch=c\x0d\x0a *3)没有下个字符就结束\x0d\x0a *4)还有字符串吗?回到2)\x0d\x0a * \x0d\x0a * 2)实现还原算法\x0d\x0a * str = "4a2b4c2d1e3a"\x0d\x0a * i\x0d\x0a */\x0d\x0apublic class Demo5 {\x0d\x0a public static void main(String[] args) {\x0d\x0a String s = comp("aaaawwwwe")\x0d\x0a System.out.println(s)\x0d\x0a// System.out.println(decomp(s))\x0d\x0a \x0d\x0a }\x0d\x0a public static String comp(String str){\x0d\x0a int i = 1\x0d\x0a StringBuilder buf = new StringBuilder()\x0d\x0a int count = 1\x0d\x0a char ch = str.charAt(0)\x0d\x0a for(){\x0d\x0a char c = i==str.length() ? '\10':str.charAt(i)\x0d\x0a if(c==ch){\x0d\x0acount++\x0d\x0a }else{\x0d\x0aif(count == 1)\x0d\x0a buf.append(ch)\x0d\x0aelse \x0d\x0a buf.append(count).append(ch)\x0d\x0acount=1\x0d\x0ach = c\x0d\x0a } \x0d\x0a i++\x0d\x0a if(i==str.length()+1){\x0d\x0abreak\x0d\x0a } \x0d\x0a }\x0d\x0a return buf.toString()\x0d\x0a \x0d\x0a }\x0d\x0a}具体解压缩方法如下:Java压缩解压缩文件的方法有,第一中借助javajdk自带的ZipOutputStream和ZipInputStream。第二种,借助第三方jar,例如ApacheCommonsCompress和Ant。
前提,需要将Ant的ant、jar和ant-launcher、jar添加到classpath中。先创建一个Expander类,该类继承了Ant的org、apache、tools、ant、taskdefs、Expand类。
第二步:使用Expander类。