java图片压缩比为1

Python08

java图片压缩比为1,第1张

java压缩图片,按照比例进行压缩

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

文章知

缩小即可。javathumbnails压缩图片占用内存过大的解决办法:

1、打开压缩图网站,点击选择图片压缩按钮。

2、图片上传前网站默认的压缩等级是70,图片上传后会自动按照当前设置的压缩等级进行压缩,如果压缩后的大小不合要求,可再次设置图片的宽高尺寸、压缩等级等参数,宽高留空时默认按照原图尺寸进行压缩,压缩等级越小则压缩后的图片体积越小,最后点击开始压缩按钮重新压缩。

3、图片压缩后,我们就能明显的看到图片压缩后的体积缩小了很多,点击“保存图片”即可。

java要实现把一个大图片压缩到指定大小的图片且长宽比不变可以尝试以下操作:

建立一个AffineTransform

AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)

转换矩阵,缩放比较简单(矩阵可以干很多事情,想做图像处理软件可以研究下)

[ x'] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ]

[ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ]

[ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]

10倍比较难算(根号10啊,当然你想算也行),9倍好点(9的开方是3),m00为1/3,m01为0,m02为0,m10为0,m11为1/3,m12为0。

再建一个AffineTransformOp,把上面的转换传进去

AffineTransformOp(AffineTransform xform, int interpolationType)

最后调用AffineTransformOp的BufferedImage filter(BufferedImage src, BufferedImage dst) ,src传原图片,返回值就是想要的Image,注意是返回值,不是dst,不明白可以看下Java API