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);
}
}
分享到:
相关推荐
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...
在本项目中,"Java直连4g摄像头demo" 是一个使用Java编程语言实现的解决方案,旨在解决设备与服务器不在同一网络环境下,无法通过局域网传输视频的问题。这种情况下,传统的NVR(网络视频录像机)视频流对接方式不再...
【压缩包子文件的文件名称列表】: 1. **qz-domain-master.zip**:这可能是项目的领域模型(Domain Model)代码,包含业务对象和实体类,定义了系统中的核心概念和业务规则。 2. **center-util-master.zip**:中心...