java中实现无损压缩图片 直接上代码

方式一:压缩后生成base64或写出图片
 /*** * @param image 原图* @param quality 压缩的质量参数 0-1之间可选*/
public static void compressPicByQuality(String filePath, float quality) {BufferedImage image= ImageIO.read(new File(filePath));try {// 得到指定Format图片的writer(迭代器)Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpg");// 得到writerImageWriter 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的ImageOutputwriter.setOutput(ImageIO.createImageOutputStream(byteArrayOutputStream));writer.write(null, iIamge, iwp);byte[] imgBytes = byteArrayOutputStream.toByteArray();//最终生成的是base64编码格式的String base64Str = Base64.encodeToString(imgBytes);} catch (IOException e) {e.printStackTrace();}}

实现base64与图片之间互转

方式二:压缩后覆盖原图
/*** 对图片进行原比例无损压缩,压缩后覆盖原图片** @param path*/private static void doWithPhoto(String path) {File file = new File(path);if (!file.exists()) {return;}BufferedImage image = null;FileOutputStream os = null;try {image = ImageIO.read(file);int width = image.getWidth();int height = image.getHeight();BufferedImage bfImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);bfImage.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);os = new FileOutputStream(path);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);encoder.encode(bfImage);} catch (IOException e) {e.printStackTrace();} finally {if (os != null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}}}

java无损压缩图片相关推荐

  1. java无损压缩图片以及按照比例压缩图片

    需求: 有一个列表加载封面图片 , 只做一个封面显示 , 无实际观察意义,但是图片的原图很大 , 造成资源加载浪费,所以按照比例压缩文件 import com.sun.image.codec.jpeg ...

  2. Java BufferImage图片处理(获取宽高、图片截取、转换灰度图)

    Java BufferImage图片处理(获取宽高.截取.转换灰度图) 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Java读取图片为byte[]数组,或者BufferedImage及互相转 ...

  3. java中图片和字节数组相互转化

    java中图片和字节数组相互转化 方案一:使用ImageIO来实现 将图片转化为字节数组 /*** 通过图片路径将图片文件转化为字符数组* * @param url 图片路径* @return byt ...

  4. Java实现图片裁剪预览功能

    Java实现图片裁剪预览功能 在项目中,我们需要做些类似头像上传,图片裁剪的功能,ok看下面文章! 需要插件:jQuery Jcrop 后端代码: package org.csg.upload;imp ...

  5. java截取图片-设置方位+设置大小

    java截取图片-设置方位+设置大小 package com.onegrid.darj.test; import java.awt.Rectangle;   import java.awt.image ...

  6. java旋转图片并画出_java实现图片角度旋转并获得图片信息

    本文实例为大家分享了java实现图片角度旋转并获得图片信息的具体代码,供大家参考,具体内容如下 public class demo { /** * 调整图片角度 * make by dongxh 20 ...

  7. java 对比度,java批改图片亮度对比度

    java修改图片亮度对比度 我参考了这个博客 http://blog.csdn.net/jia20003/article/details/7385160 以下是我根据这个编的代码 public sta ...

  8. java 简单图片浏览器_Java实现简单的图片浏览器

    第一次写博客,不喜勿喷. 最近一个小师弟问我怎么用Java做图片浏览器,感觉好久没玩Java了,就自己动手做了一下. 学校的教程是用Swing来做界面的,所以这里也用这个来讲. 首先要做个大概的界面出 ...

  9. java将图片转byte存入数据库_Java将byte[]转图片存储到本地的案例

    Java中,将字节数组转成图片的有很多种方式,今天在这里记录其中一种,方便以后查询,也可以提供给没有接触的童鞋做一个参考. 首先是将图片转成字节数组 import sun.misc.BASE64Enc ...

  10. JAVA获取图片的宽、高和大小

    JAVA获取图片的宽.高.大小 如果是本地磁盘文件 File file = new File("C:\\Users\\root\\Desktop\\test.jpg");Buffe ...

最新文章

  1. ARM QT实现多点触摸【转】
  2. rsync+innotify实现实时同步
  3. P2285 [HNOI2004]打鼹鼠
  4. matlab 倒数第二个位置_MATLAB中运行以下程序后倒数第二部分画图程序要怎么改??、、、...
  5. Win10 jdk的安装以及环境变量的配置,及需要注意的坑
  6. (转载)Hadoop常用SDK系列五 TotalOrderPartitioner
  7. Hazelcast更换CEO,承诺继续造福开源社区
  8. CCF201409-3 字符串匹配(解法二)(100分)(废除!!!)
  9. 旅游后台管理系列——SSM框架Dao层整合
  10. bjui给出的一个标准应用的首页
  11. android httpclient 设置超时
  12. 利用计算机管理档案,利用计算机管理档案的方法
  13. 基于Zynq的光流法软硬件协同实现
  14. 004_Makefile的编译
  15. 关于原生ajax的那些事
  16. 前后端分离页面500错误,控制台不打印错误日志的错误定位
  17. android资源收藏
  18. FastDfs与ElasticSearch和Mysql完成海量数据存储搜索功能
  19. 根据IP获取城市代码
  20. # SpringCloud集成 报错 An attempt was made to call a method that does not exist. The attempt was

热门文章

  1. Win10环境下ubuntu安装教程
  2. 【Codecs系列】VP9码流结构和概述
  3. 修复IE主页被篡改劫持的方法之一:自定义xxx.reg文件
  4. GM300单片硅钢铁损测试仪操作使用指引
  5. 微信小程序实现下拉刷新和上拉触底,获取新数据
  6. c语言经纬度转高斯坐标系,经纬度坐标与高斯坐标的转换代码
  7. 8款主流Scrum敏捷开发工具评测,建议先马后看!
  8. 安装西门子博图一直重启_西门子博图重启后继续安装没完成的程序怎么去除?...
  9. Unity3D发布微信小程序
  10. If you already have a 64-bit JDK installed。。。。