`

java照片压缩Demo

    博客分类:
  • java
 
阅读更多
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批量压缩图片格式的PDF档(源码Demo)

    Java批量压缩图片格式的PDF档(源码Demo) 适用:仅针对纯图片型的pdf(类似扫描版)进行压缩 原理:压缩图片然后再另存成新文件 实例如下: ├── META-INF │ └── MANIFEST.MF ├── pom.xml └── src ├...

    android 图片压缩 demo

    综上所述,"android 图片压缩 demo"项目主要涉及到Android平台上的图片压缩技术,包括调整图片尺寸、计算合适的缩放比例、选择合适的图像配置以及控制压缩质量。这些技术对于优化应用性能,尤其是减少内存占用和提高...

    Java 压缩图片资源的算法demo

    Java 压缩图片资源的算法demo,采用基本的java流操作实现!

    androidstudio视频文件压缩Demo

    本示例“androidstudio视频文件压缩Demo”提供了一个详细的解决方案,它演示了如何在Android Studio项目中实现视频文件的压缩,并且还带有进度条反馈,让用户能够了解压缩过程的实时状态。以下是对这个Demo的深入...

    java实现压缩与解压缩源码,demo 分享.zip

    10. **解压缩源码分析**:在提供的"java实现压缩与解压缩源码,demo分享.pdf"文件中,你可以找到具体的实现细节,包括如何打开和关闭流,如何处理文件条目,以及如何管理内存缓冲区等。 通过理解和应用这些知识点,...

    JAVA 压缩、解压缩Demo

    在Java编程语言中,压缩和解压缩文件是常见的任务,特别是在处理大量数据或者需要节省存储空间时。本篇文章将深入探讨如何使用Java实现文件、目录的压缩与解压缩功能,并介绍一个具体的`ZipUtils.java`类的实现示例...

    使用的java系统demo

    【标题】:“使用的Java系统Demo” 在这个“使用的Java系统Demo”中,我们主要探讨的是Java在实际系统开发中的应用和示例。Java是一种广泛应用于企业级应用开发的强大编程语言,以其“一次编写,到处运行”的跨平台...

    java邮件发送Demo

    9. **导入和运行**: 解压缩EmailDemo后,可以直接导入IDE(如Eclipse或IntelliJ IDEA),然后运行主类。确保已正确配置邮件服务器信息,程序就能发送测试邮件。 10. **参考博客**: 提供的博客链接...

    java 压缩和解压 demo 解决中文乱码

    java 压缩和解压 demo 解决中文乱码 这是本人做好的一个关于java压缩、解压缩文件或文件夹的demo,解决了中文乱码的问题,可以压缩或解压缩嵌套文件夹。一个ZipHelper + ant.jar轻松解决^_^,希望可以帮助到大家!具体...

    JAVA解压缩ZIP压缩文件(含中文名文件)完整DEMO

    在Java编程环境中,处理压缩文件是一项常见的任务,尤其是在文件传输、数据存储和备份等...通过这个DEMO,开发者可以更好地理解和实践Java在处理压缩文件时的细节。记得在实际项目中根据需求进行适当的错误处理和优化。

    java_word_poi_demo

    Java Word POI Demo是一个关于如何使用Java编程语言和Apache POI库来操作Microsoft Word文档的示例项目。Apache POI是开源项目,专门用于读取、写入和修改Microsoft Office格式的文件,包括Word(.doc和.docx)、...

    java压缩demo

    一个我做好的java压缩/解压缩文件的demo,一个ZipHelper类+ant.jar包,解决了压缩或解压缩后中文乱码的问题!,可解压嵌套文件夹,用的过程只需new一个ZipHelper,调用该类方法即可,demo里有详细说明!^_^

    MongoDB免安装 java Demo

    "MongoDB免安装 Java Demo" 是一个针对初学者或者开发者的实践项目,旨在帮助理解如何在无需完整安装MongoDB的情况下,通过Java进行数据库操作。这个Demo包含了启动MongoDB、创建集合、执行查询、插入数据以及删除...

    JAVA_IO/NIO(demo,压缩jar文件)

    本压缩包包含`JAVA_IO/NIO(demo,压缩jar文件)`,意味着它提供了一些示例代码,用于演示如何使用这两种方法进行文件操作,以及如何将文件打包成jar格式。`io`标签代表传统的Java I/O API,而`nio`标签则代表了Java的...

    Java Design Demo -简单的队列

    标题“Java Design Demo -简单的队列”表明这是一个关于如何在Java中实现队列设计的示例项目。可能包含的是一个基础的队列实现,用于教学或演示目的,帮助开发者理解队列的基本操作,如enqueue(入队)和dequeue(出...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...

    java报表项目demo

    【标题】"java报表项目demo"揭示了这是一个基于Java技术的报表系统示例项目,它可能包含用于展示数据的图表和报表。Java报表通常涉及到Java编程语言与数据处理、数据分析和可视化工具的集成。 【描述】提到“java...

    Java直连4g摄像头demo

    在本项目中,"Java直连4g摄像头demo" 是一个使用Java编程语言实现的解决方案,旨在解决设备与服务器不在同一网络环境下,无法通过局域网传输视频的问题。这种情况下,传统的NVR(网络视频录像机)视频流对接方式不再...

    demo_微服务demo

    【压缩包子文件的文件名称列表】: 1. **qz-domain-master.zip**:这可能是项目的领域模型(Domain Model)代码,包含业务对象和实体类,定义了系统中的核心概念和业务规则。 2. **center-util-master.zip**:中心...

    java项目集成neo4j的demo

    总之,这个"java项目集成neo4j的demo"提供了一个很好的起点,帮助开发者快速了解如何在Java应用程序中利用Neo4j的强大功能。通过学习和运行这个示例,你可以掌握图数据库的基本用法,并为进一步深入探索Neo4j的高级...

Global site tag (gtag.js) - Google Analytics