package com.wangxuegang.image; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import javax.imageio.ImageIO; import javax.imageio.stream.ImageOutputStream; /** * * @description 照片压缩 Demo类 * @author wangxuegang * @since JDK 1.6 */ public class ImageZipTest { /** * 照片大小 */ private static final Integer PHOTO_SIZE = 102400; /** * * @description 照片 * @param bt 原始照片字节 * @param scale 缩放比例 * @param flag 缩放选择:true 放大; false 缩小 * @throws IOException * @since JDK 1.6 */ public static void pic(byte[] bt,Integer scale,boolean flag) throws IOException{ System.out.println("缩放比例:"+scale); InputStream is = new ByteArrayInputStream(bt); //原始照片 BufferedImage oldImage = ImageIO.read(is); //照片压缩 BufferedImage newImage = picCompress(oldImage, scale, flag); //字节数组输出流 ByteArrayOutputStream bs = new ByteArrayOutputStream(); //图片输出流 ImageOutputStream imOut = ImageIO.createImageOutputStream(bs); ImageIO.write(newImage, "jpg", imOut); //字节输入流 InputStream contentStream = new ByteArrayInputStream(bs.toByteArray()); System.out.println("压缩后大小:"+contentStream.available()); System.out.println("条件大小::"+PHOTO_SIZE); //判断照片压缩后的大小 while(contentStream.available() > PHOTO_SIZE){ scale +=1; //不满足照片大小,递归继续压缩照片 pic(bs.toByteArray(), scale, flag); ImageIO.write(newImage, "JPEG", new File("C:\\Users\\wangxuegang\\Desktop\\萌_01.jpg")); contentStream.close(); bs.close(); is.close(); break; } } /** * * @description 照片压缩 * @param image 原始照片 * @param scale 缩放比例 * @param flag 缩放选择:true 放大; false 缩小 * @since JDK 1.6 */ private static BufferedImage picCompress(BufferedImage image,Integer scale,boolean flag) { //原始照片宽高 int width = image.getWidth(); int height = image.getHeight(); if(flag) {// 放大 width = width * scale; height = height * scale; } else {// 缩小 width = width / scale; height = height / scale; } System.out.println("width:"+width); System.out.println("height:"+height); Image img = image.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage outputImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics graphics = outputImage.getGraphics(); graphics.drawImage(img, 0, 0, null); graphics.dispose(); return outputImage; } /** * * @description 测试Main * @since JDK 1.6 */ public static void main(String[] args) throws FileNotFoundException, IOException { InputStream is = new FileInputStream(new File("C:\\萌.jpg")); ByteArrayOutputStream bo = new ByteArrayOutputStream(); byte[] bt = new byte[1024]; int len = 0; while((len = is.read(bt))>0){ bo.write(bt,0,len); } bo.close(); is.close(); pic(bo.toByteArray(),5,false); } }
- 浏览: 43340 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (59)
- java (16)
- oracle (5)
- miniui (3)
- echarts (2)
- maven (1)
- ssh (1)
- sql server (2)
- javascript (6)
- jQuery (3)
- tomcat (2)
- ajax (1)
- tool (4)
- easyui (1)
- httpclient (1)
- exception (2)
- win10 (1)
- mysql (3)
- exe4j (1)
- jenkins (1)
- mongoDB (1)
- bootstrap (1)
- quartz (1)
- liunx (0)
- thread (1)
- layui (1)
- cat (1)
- mybatis (1)
最新评论
发表评论
-
java jdk 安装https证书
2020-02-28 14:20 383C:\Java\jdk1.8.0_212\jre\bi ... -
java数字排序
2019-12-29 22:43 0package com.wxg; public cla ... -
Java中执行shell命令cp拷贝文件
2019-08-06 10:39 812//shell拷贝命令 String shell = &q ... -
Calendar时间工具类
2019-05-15 11:11 603SimpleDateFormat format=new ... -
springcloud入门_服务提供方
2018-12-19 10:43 3121.服务提供方,在注册中心发现该服务 <proje ... -
springcloud入门_注册中心
2018-12-19 10:18 3851.启动注册中心实例 pom.xml <p ... -
封装jdbc
2018-12-10 17:08 3031.定义实体类 package com.wangxuega ... -
java内存中初始化数据字典
2018-11-22 17:18 10541.在web.xml中配置监听,注意:要配置在Spring加 ... -
FtpUtil工具类
2018-11-22 16:01 346package com.wangxuegang.utils ... -
InputStream流和byte[]数组互转
2018-08-21 10:39 905代码如下: File fi = new File(&quo ... -
读取目录下文件打包zip文件
2018-08-22 09:09 655import java.io.File; import j ... -
getClass().getClassLoader().getResourceAsStream("XXX.xls");
2017-03-16 20:35 0//获取当前类所在项目相对路径(项目发布后文件路径),返回一个 ... -
for循环与Iterator迭代器
2017-03-15 09:47 0//首先定义一个Iterator<T>泛型,使用h ... -
java线程的两个实现方法
2017-03-13 13:47 0//1.继承方式 public class ThreadTes ... -
自造spring容器&&web.xm
2018-12-21 11:25 3361.自造spring容器 package cn.wxg.ele ... -
Excel文件格式xls和xlsx区别
2018-12-25 15:30 1557//xls和xlsx区别:数据存储方式不同,xlsx存储数据更 ... -
解决get请求传中文乱码问题
2018-09-03 09:47 1232//页面get传参中文,参数套两个encodeURI()方 ... -
PIO导入解析Excel
2017-01-12 17:27 0//获取Excel文件名,io流 MultiPartReque ... -
hibernate映射文件注解
2017-01-10 21:08 0package com.zeng.model; import ... -
年度总结
2016-12-29 14:38 0自述:我通过奉贤就业一本通项目的开发,慢慢熟悉了解公司产品研发 ...
相关推荐
Java批量压缩图片格式的PDF档(源码Demo) 适用:仅针对纯图片型的pdf(类似扫描版)进行压缩 原理:压缩图片然后再另存成新文件 实例如下: ├── META-INF │ └── MANIFEST.MF ├── pom.xml └── src ├...
综上所述,"android 图片压缩 demo"项目主要涉及到Android平台上的图片压缩技术,包括调整图片尺寸、计算合适的缩放比例、选择合适的图像配置以及控制压缩质量。这些技术对于优化应用性能,尤其是减少内存占用和提高...
Java 压缩图片资源的算法demo,采用基本的java流操作实现!
本示例“androidstudio视频文件压缩Demo”提供了一个详细的解决方案,它演示了如何在Android Studio项目中实现视频文件的压缩,并且还带有进度条反馈,让用户能够了解压缩过程的实时状态。以下是对这个Demo的深入...
10. **解压缩源码分析**:在提供的"java实现压缩与解压缩源码,demo分享.pdf"文件中,你可以找到具体的实现细节,包括如何打开和关闭流,如何处理文件条目,以及如何管理内存缓冲区等。 通过理解和应用这些知识点,...
在Java编程语言中,压缩和解压缩文件是常见的任务,特别是在处理大量数据或者需要节省存储空间时。本篇文章将深入探讨如何使用Java实现文件、目录的压缩与解压缩功能,并介绍一个具体的`ZipUtils.java`类的实现示例...
【标题】:“使用的Java系统Demo” 在这个“使用的Java系统Demo”中,我们主要探讨的是Java在实际系统开发中的应用和示例。Java是一种广泛应用于企业级应用开发的强大编程语言,以其“一次编写,到处运行”的跨平台...
9. **导入和运行**: 解压缩EmailDemo后,可以直接导入IDE(如Eclipse或IntelliJ IDEA),然后运行主类。确保已正确配置邮件服务器信息,程序就能发送测试邮件。 10. **参考博客**: 提供的博客链接...
java 压缩和解压 demo 解决中文乱码 这是本人做好的一个关于java压缩、解压缩文件或文件夹的demo,解决了中文乱码的问题,可以压缩或解压缩嵌套文件夹。一个ZipHelper + ant.jar轻松解决^_^,希望可以帮助到大家!具体...
在Java编程环境中,处理压缩文件是一项常见的任务,尤其是在文件传输、数据存储和备份等...通过这个DEMO,开发者可以更好地理解和实践Java在处理压缩文件时的细节。记得在实际项目中根据需求进行适当的错误处理和优化。
Java Word POI Demo是一个关于如何使用Java编程语言和Apache POI库来操作Microsoft Word文档的示例项目。Apache POI是开源项目,专门用于读取、写入和修改Microsoft Office格式的文件,包括Word(.doc和.docx)、...
一个我做好的java压缩/解压缩文件的demo,一个ZipHelper类+ant.jar包,解决了压缩或解压缩后中文乱码的问题!,可解压嵌套文件夹,用的过程只需new一个ZipHelper,调用该类方法即可,demo里有详细说明!^_^
【压缩包子文件的文件名称列表】中的"selenium-java-3.141.59.rar"可能包含Selenium WebDriver的Java绑定库,版本为3.141.59。这是一个常见的版本,通常会提供所需的jar文件,使得Java代码可以调用Selenium API。...
"MongoDB免安装 Java Demo" 是一个针对初学者或者开发者的实践项目,旨在帮助理解如何在无需完整安装MongoDB的情况下,通过Java进行数据库操作。这个Demo包含了启动MongoDB、创建集合、执行查询、插入数据以及删除...
本压缩包包含`JAVA_IO/NIO(demo,压缩jar文件)`,意味着它提供了一些示例代码,用于演示如何使用这两种方法进行文件操作,以及如何将文件打包成jar格式。`io`标签代表传统的Java I/O API,而`nio`标签则代表了Java的...
标题“Java Design Demo -简单的队列”表明这是一个关于如何在Java中实现队列设计的示例项目。可能包含的是一个基础的队列实现,用于教学或演示目的,帮助开发者理解队列的基本操作,如enqueue(入队)和dequeue(出...
J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...
【标题】"java报表项目demo"揭示了这是一个基于Java技术的报表系统示例项目,它可能包含用于展示数据的图表和报表。Java报表通常涉及到Java编程语言与数据处理、数据分析和可视化工具的集成。 【描述】提到“java...
【压缩包子文件的文件名称列表】: 1. **qz-domain-master.zip**:这可能是项目的领域模型(Domain Model)代码,包含业务对象和实体类,定义了系统中的核心概念和业务规则。 2. **center-util-master.zip**:中心...
在本项目中,"Java直连4g摄像头demo" 是一个使用Java编程语言实现的解决方案,旨在解决设备与服务器不在同一网络环境下,无法通过局域网传输视频的问题。这种情况下,传统的NVR(网络视频录像机)视频流对接方式不再...