好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java 压缩图片(只缩小体积,不更改图片尺寸)的示例

1.情景展示

  在调用腾讯身份证OCR接口的时候,由于要求图片大小只能限制在1MB以内,这样,就必须使用到图片压缩技术

2.代码展示

?

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

/**

  * 图片处理工具类

  * @explain

  * @author Marydon

  * @creationTime 2019年9月3日上午10:14:17

  * @version 1.0

  * @since

  * @email marydon20170307@163测试数据

  */

public class ImgUtils {

     /**

      * 压缩图片(通过降低图片质量)

      * @explain 压缩图片,通过压缩图片质量,保持原图大小

      * @param quality

      *       图片质量(0-1)

      * @return byte[]

      *      压缩后的图片(jpg)

      * @throws

      */

     public static byte [] compressPicByQuality( byte [] imgByte, float quality) {

         byte [] imgBytes = null ;

         try {

             ByteArrayInputStream byteInput = new ByteArrayInputStream(imgByte);

             BufferedImage image = ImageIO.read(byteInput);

 

             // 如果图片空,返回空

             if (image == null ) {

                 return null ;

             }

             // 得到指定Format图片的writer(迭代器)

             Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName( "jpeg" );

             // 得到writer

             ImageWriter writer = (ImageWriter) iter.next();

             // 得到指定writer的输出参数设置(ImageWriteParam )

             ImageWriteParam iwp = writer.getDefaultWriteParam();

             // 设置可否压缩

             iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);

              // 设置压缩质量参数

             iwp.setCompressionQuality(quality);

 

             iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED);

 

             ColorModel colorModel = ColorModel.getRGBdefault();

             // 指定压缩时使用的色彩模式

             iwp.setDestinationType(

                     new javax.imageio.ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel( 16 , 16 )));

 

             // 开始打包图片,写入byte[]

             // 取得内存输出流

             ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

             IIOImage iIamge = new IIOImage(image, null , null );

 

             // 此处因为ImageWriter中用来接收write信息的output要求必须是ImageOutput

             // 通过ImageIo中的静态方法,得到byteArrayOutputStream的ImageOutput

             writer.setOutput(ImageIO.createImageOutputStream(byteArrayOutputStream));

             writer.write( null , iIamge, iwp);

             imgBytes = byteArrayOutputStream.toByteArray();

         } catch (IOException e) {

             System.out.println( "write errro" );

             e.printStackTrace();

         }

         return imgBytes;

     }

}

3.其它代码

  import org.apache测试数据mons.codec.binary.Base64;

?

1

2

3

4

5

6

7

8

9

10

11

12

String imgBase64 = "" ;

try {

     // 图片大小超过1MB

     if (file.getSize()/ 1024 > 1024 ) {

         byte [] imgBytes = ImgUtils测试数据pressPicByQuality(file.getBytes(), 0 .1F);

         imgBase64 = Base64.encodeBase64String(imgBytes);

     } else {

         imgBase64 = Base64.encodeBase64String(file.getBytes());

     }

} catch (IOException e1) {

     e1.printStackTrace();

}

  说明:

  生成的base64图片没有图片格式头,即:data:image/jpeg;base64,

4.增加前端代码

?

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

/**

  * 拍照或选择图片

  */

this .uploadPicture = function () {

     // js 获取文件对象

     var fileObj = document.getElementById( "file" ).files[0];

     if ( null == fileObj) {

         alert( "图像上传失败,请重试!" );

     }

     // TODO 显示遮罩

     

     // 创建form表单

     var formFile = new FormData();

     //加入文件对象

     formFile.append( "file" , fileObj);

     // 创建XMLHttpRequest 对象

     var xhr = new XMLHttpRequest();

     xhr.open( "post" , baseUrl + "/weixin/facein/upImg3.do" , true );

     xhr.onload = function () {

         var resData = JSON.parse( this .responseText)

         // 将返回数据转换成JSON对象

         var json = eval( '(' + resData.data2 + ')' );

         // 身份证识别成功

         if (json.ret == 0) {

             // TODO 将所需数据填充到页面

             

         } else {

             alert( "识别失败,请重试!" + json.msg);

         }

         document.getElementById( "file" ).value = "" ;

         // TODO 隐藏遮罩

     };

     // 调用腾讯接口

     xhr.send(formFile);

};

以上就是java 压缩图片(只缩小体积,不更改图片尺寸)的示例的详细内容,更多关于java 压缩图片的资料请关注其它相关文章!

原文链接:https://HdhCmsTestcnblogs测试数据/Marydon20170307/p/11486776.html

查看更多关于java 压缩图片(只缩小体积,不更改图片尺寸)的示例的详细内容...

  阅读:24次