图片压缩处理的几种方式
来源:互联网 发布:手机网络配置文件 编辑:程序博客网 时间:2024/04/29 22:03
图片压缩的几种方式
一 、Thumbnailator框架
Thumbnailator 是一个Google的图片处理开源Java类库支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。Thumbnailator官网:http://code.google.com/p/thumbnailator/
maven配置
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version></dependency>
public static void main(String[] args) { //创建一个新的outputStream ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); FileOutputStream outputStream1 = null; try { File file =new File("路径"); //用ImageIO将文件读取为BufferedImage格式 //BufferedImage使用双缓冲技术,将生成合适的缓冲区 //具体可参考http://blog.csdn.net/novaless/article/details/5954933 BufferedImage image = ImageIO.read(file); //使用Thumbnails方法 //scale(x) x>1 为放大 x<1为缩小 //toOutputStream转为流(toFile转为file文件,但是会生成一个临时文件,影响性能) Thumbnails.of(image).scale(0.5f).outputFormat("jpg").toOutputStream(outputStream); //写入文件 outputStream1 = new FileOutputStream(new File("C:\\Users\\PC\\Desktop\\out.jpg")); outputStream.writeTo(outputStream1); } catch (IOException e) { e.printStackTrace(); }finally { IOUtils.closeQuietly(outputStream); IOUtils.closeQuietly(outputStream); } }
二 :BufferImage.drawImage()
public static void main(String[] args) {= try { File file =new File("C:\\Users\\PC\\Desktop\\timg.jpg"); //用ImageIO将文件读取为BufferedImage格式 BufferedImage image = ImageIO.read(file); //读取图片高宽度 int width = (image.getWidth(null)); int height = (image.getHeight(null)); //新建一个新的BufferedImage对象 BufferedImage newImage = new BufferedImage(width / 2,height / 2,BufferedImage.TYPE_INT_RGB); //将原有对象以 1/2 宽度 ,1/2高度进行缩放 newImage.getGraphics().drawImage(image.getScaledInstance(width / 2,height / 2,BufferedImage.TYPE_INT_RGB), 0, 0, null); //新建文件 FileOutputStream outputStream = new FileOutputStream(new File("C:\\Users\\PC\\Desktop\\out.jpg")); //读出 ImageIO.write(newImage,"jpg",outputStream); } catch (IOException e) { e.printStackTrace(); }}
三、alibaba的simpleimage
支持操作:JPEG解码增强(无内存泄漏,支持CMYK),GIF动画的读取和保存,图像颜色空间转换,图像高质量缩略,图像打水印文字
源码地址:https://github.com/alibaba/simpleimage
maven配置:
<dependency> <groupId>com.alibaba</groupId> <artifactId>simpleimage</artifactId> <version>1.2.3</version></dependency><dependency> <groupId>javax.media</groupId> <artifactId>jai-core</artifactId> <version>1.1.3</version></dependency>
代码
FileInputStream inputStream = null; FileOutputStream outputStream = null; ImageRender imageRender = null; try { //读取文件 inputStream = new FileInputStream(new File("C:\\Users\\PC\\Desktop\\timg.png")); //转为BufferedImage,获得宽高度 BufferedImage image = ImageIO.read(inputStream); int width = image.getWidth(); int height = image.getHeight(); //将输入流放入ImageRender ImageRender inImageRender = new ReadRender(inputStream); //设置缩放参数 ScaleParameter scaleParameter = new ScaleParameter(); scaleParameter.setMaxHeight(height / 2); scaleParameter.setMaxWidth(width / 2); ImageRender scaleImageRender = new ScaleRender(inImageRender, scaleParameter); outputStream = new FileOutputStream(new File("C:\\Users\\PC\\Desktop\\out.png")); //写出文件,文件为Jpg格式 imageRender = new WriteRender(scaleImageRender, outputStream,ImageFormat.PNG); imageRender.render(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (SimpleImageException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(inputStream); IOUtils.closeQuietly(outputStream); if (imageRender != null) { try { //释放simpleImage的内部资源 imageRender.dispose(); } catch (SimpleImageException ignore) { } } }
四、ImageJ框架
mageJ能够显示,编辑,分析,处理,保存,打印8位,16位,32位的图片, 支持TIFF, PNG, GIF, JPEG, BMP, DICOM, FITS等多种格式。ImageJ支持图像栈功能,即在一个窗口里以多线程的形式层叠多个图像, 并行处理。只要内存允许,ImageJ能打开任意多的图像进行处理。除了基本的图像操作, 比如缩放,旋转, 扭曲, 平滑处理外,ImageJ还能进行图片的区域和像素统计, 间距,角度计算, 能创建柱状图和剖面图,进行傅里叶变换。
maven配置:<dependency> <groupId>gov.nih.imagej</groupId> <artifactId>imagej</artifactId> <version>1.46</version></dependency>
代码:
public static void main(String[] args) {try { // File file = new File("C:\\Users\\PC\\Desktop\\timg.png"); ImagePlus imagePlus = IJ.openImage("C:\\Users\\PC\\Desktop\\timg2.png"); //用代码打开图片O(∩_∩)O哈哈哈~ //imagePlus.show(); //获取宽高度 int width = imagePlus.getWidth(); int height = imagePlus.getHeight(); ImageProcessor imageProcessor = imagePlus.getProcessor(); //设置为可以进行编辑 imageProcessor.setInterpolate(true); //重置大小 ImageProcessor outImageProcessor = imageProcessor.resize(width / 10 ,height / 10); imagePlus.setProcessor(imagePlus.getTitle(),outImageProcessor); //更新原本图像 imagePlus.updateAndDraw(); //写入本地 IJ.save(imagePlus,"C:\\Users\\PC\\Desktop\\timg3.png");}catch (Exception e){ e.getStackTrace();}}
五、Java image scaling
java-image-scaling 可用来生成高质量的图像缩略图。
maven配置:
<dependency> <groupId>com.mortennobel</groupId> <artifactId>java-image-scaling</artifactId> <version>0.8.6</version></dependency>
代码:
public static void main(String[] args) { FileOutputStream fileOutputStream = null; try { File file = new File("C:\\Users\\PC\\Desktop\\timg.png"); BufferedImage bufferedImage = ImageIO.read(file); int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); //true -- 生成低品质缩略图 (不过我试过false,好像效果一样/(ㄒoㄒ)/~~) ResampleOp resampleOp = new ResampleOp(DimensionConstrain.createMaxDimension(width/ 2 , height / 2 ,true)); BufferedImage scaleBufferedImage = resampleOp.filter(bufferedImage,null); fileOutputStream = new FileOutputStream(new File("C:\\Users\\PC\\Desktop\\timg4.jpg")); //写出 ImageIO.write(scaleBufferedImage,"jpg",fileOutputStream); } catch (IOException e) { e.printStackTrace(); }}
总结
好了,就写到这了,还有很多方法去实现这个功能,可以参考:http://blog.csdn.net/it_man/article/details/7606218
0 0
- 图片压缩处理的几种方式
- Android图片压缩的几种方式
- 图片的几种处理方式
- 图片的几种处理方式
- TextView显示带图片html的几种处理方式
- 图片的压缩的几种方法
- 论压缩图片核心技术,几种常见使用方式
- Bitmap压缩的几种方式
- Android压缩图片的几种方法
- Android压缩图片的几种方法
- android 压缩图片的几种方法
- Android压缩图片的几种方法
- za压缩图片的几种方法
- Android压缩图片的几种方法
- Android图片压缩的几种方法
- Android 中图片压缩处理的方式(附源代码)
- 图片的压缩处理
- 三种图片的压缩方式
- Linux一键安装vpn
- 条码标签打印软件CodeSoft 6.0培训教程
- C++Primer学习笔记
- hive表信息查询
- RobotFramework环境配置十:中文日志乱码问题
- 图片压缩处理的几种方式
- Android APP禁止旋转和软键盘的控制
- ExtJS4——图片上传
- git如何推送
- SQL学习(一)
- hadoop学习笔记(一)
- A potentially dangerous Request.Form value was detected from the client (FCKeditor="<img alt="" src=
- kalman滤波的本质
- 超长正整数相加(OJ)