ImageIO的图片压缩算法

调用CompressPictureUtils.compress(要压缩的图片路径,保存的图片路径)可以对图片进行压缩。

左边的原图,右边是压缩后的图片。

调用函数的方法:

	public static void main(String[] args) {CompressPictureUtils.compress("D:\\1.jpg", "D:\\0.jpg");}

可以设置压缩属性:

/*** 图片压缩最大宽1920像素*/public static final Integer PICTURE_COMPRESS_WIDTH_MAX = 1920;// 1920像素/*** 图片压缩最大高1920像素*/public static final Integer PICTURE_COMPRESS_HEIGHT_MAX = 1920;// 1920像素/*** 图片压缩最小容量64KB*/public static final Integer PICTURE_COMPRESS_MIN = 1 << 16;// 64KB/*** 图片压缩最大容量64MB*/public static final Integer PICTURE_COMPRESS_MAX = 1 << 26;// 64MB/*** 图片压缩最小容量差64KB*/public static final Integer PICTURE_COMPRESS_DIFFER_MIN = 1 << 16;// 64KB

工具类:(复制后可以直接使用)

package util;import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.Files;import javax.imageio.ImageIO;/*** 图片压缩算法* * @author ALI**/
public class CompressPictureUtils {public static void main(String[] args) {CompressPictureUtils.compress("D:\\1.jpg", "D:\\0.jpg");}/*** 图片压缩最大宽1920像素*/public static final Integer PICTURE_COMPRESS_WIDTH_MAX = 1920;// 1920像素/*** 图片压缩最大高1920像素*/public static final Integer PICTURE_COMPRESS_HEIGHT_MAX = 1920;// 1920像素/*** 图片压缩最小容量64KB*/public static final Integer PICTURE_COMPRESS_MIN = 1 << 16;// 64KB/*** 图片压缩最大容量64MB*/public static final Integer PICTURE_COMPRESS_MAX = 1 << 26;// 64MB/*** 图片压缩最小容量差64KB*/public static final Integer PICTURE_COMPRESS_DIFFER_MIN = 1 << 16;// 64KBpublic static void compress(String sourceImagePath, String destinationImagePath) {try {/* 过滤小于64kb和大于64mb的图片 */File sourceImageFile = new File(sourceImagePath);File destinationImageFile = new File(destinationImagePath);long sourceImageSize = sourceImageFile.length();if (sourceImageSize == 0) {throw new Exception("empty");}if (sourceImageSize < PICTURE_COMPRESS_MIN) {throw new Exception("small");}if (sourceImageSize > PICTURE_COMPRESS_MAX) {throw new Exception("large");}/* 设置图片大小 */BufferedImage inputImage = ImageIO.read(sourceImageFile);int sourceImageWidth = inputImage.getWidth();int sourceImageHeight = inputImage.getHeight();int destinationImageWidth = sourceImageWidth;int destinationImageHeight = sourceImageHeight;if (sourceImageWidth > PICTURE_COMPRESS_WIDTH_MAX || sourceImageHeight > PICTURE_COMPRESS_HEIGHT_MAX) {if (sourceImageWidth > sourceImageHeight) {destinationImageWidth = PICTURE_COMPRESS_WIDTH_MAX;destinationImageHeight = destinationImageWidth * sourceImageHeight / sourceImageWidth;} else {destinationImageHeight = PICTURE_COMPRESS_HEIGHT_MAX;destinationImageWidth = destinationImageHeight * sourceImageWidth / sourceImageHeight;}}/* 压缩图片 */Image image = inputImage.getScaledInstance(destinationImageWidth, destinationImageHeight,Image.SCALE_DEFAULT);BufferedImage outputImage = new BufferedImage(destinationImageWidth, destinationImageHeight,BufferedImage.TYPE_INT_RGB);Graphics graphics = outputImage.getGraphics();graphics.drawImage(image, 0, 0, null);graphics.dispose();ImageIO.write(outputImage, "jpg", destinationImageFile);/* 过滤比原图小8kb以下的的图片 */long destinationImageSize = destinationImageFile.length();if (destinationImageSize > (sourceImageSize - PICTURE_COMPRESS_DIFFER_MIN)) {throw new Exception("low");}} catch (Exception e) {try {String msg = e.getMessage();if (msg == "small" || msg == "low") {// 过小或压缩率过低,保存原图File sourceImageFile = new File(sourceImagePath);File destinationImageFile = new File(destinationImagePath);destinationImageFile.delete();Files.copy(sourceImageFile.toPath(), destinationImageFile.toPath());} else {// 空或过大或异常,保存空图File emptyfile = new File(destinationImagePath);emptyfile.delete();emptyfile.createNewFile();}} catch (Exception e1) {}}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/353199.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

图像压缩原理

原文网址&#xff1a;http://blog.csdn.net/newchenxf/article/details/51693753 转载请注明出处。 1 图像可压缩的原因 一张原始图像(1920x1080)&#xff0c;如果每个像素32bit表示&#xff08;RGBA&#xff09;&#xff0c;那么&#xff0c;图像需要的内存大小 1920x1080x4 …

C# 图片压缩处理

今天老大让做一个图片压缩功能&#xff0c;自己在网上找了一些解决方法&#xff0c;也同时对方法进行了提炼&#xff01; 在下面的代码中会有一个字段Encoder.Quality 字段&#xff0c;这个对应的有个一个values是神奇的值 MSDN解释是&#xff1a;Quality 类别将指定的图像压…

线性代数——基变换和图像压缩

信息量过大的情况下使用压缩&#xff0c;如果不压缩系统超载&#xff0c;导致无法发送图片或视频&#xff0c;所以进行压缩处理 &#xff08;这里的图像压缩指的是有损压缩&#xff09; 下图是一个像素为 512 512 512\times512 512512的图像&#xff0c;黑点表示为一个像素 这…

图像压缩小波变换原理

图像编码算法尽可能节省图像的存储空间和减少传输带宽需求&#xff0c;图像编码的目的是在满足一定解码重构质量的条件下利用尽可能少的比特数对图像进行表示。数字图像中的像素都不是独立存在的&#xff0c;小到相邻像素之间&#xff0c;大到图像块与图像块之间&#xff0c;不…

JPEG图像压缩算法的python实现

摘要 文章在研究JPEG压缩编码对图像数据压缩的基本原理的基础上&#xff0c;设计了JPEG图像压缩算法程序实现流程&#xff0c;利用 Python语言对程序进行了编写&#xff0c;并实现了对压缩质量进行控制&#xff0c;验证了JPEG压缩编码对图像数据压缩的可行性。 用 JPEG压缩软件…

图像及图像压缩的研究

一、图片格式、应用场景 1、BMP格式 BMP是英文Bitmap&#xff08;位图&#xff09;的简写&#xff0c;它是Windows操作系统中的标准图像文件格式&#xff0c;能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发&#xff0c;BMP位图格…

unity图像压缩算法原理

概述 在计算机图形学中&#xff0c;存在许多纹理压缩方案。压缩既减少了纹理内存占用&#xff0c;又降低了使用纹理的带宽要求。本文中&#xff0c;“纹理压缩”与“图像压缩”不同&#xff0c;因为纹理压缩方案的设计允许作为纹理采样的一部分进行有效的随机访问。“图像压缩…

【图像压缩】有损压缩实现无损预测

updating... 1 绪论 一篇很好的结合对比学习与特征压缩的工作。 本文贡献&#xff1a; 1.公式化面向下游预测任务压缩的概念 2.描述了在增强不变性任务上高表现所需要的比特数。 3.提出无监督目标函数训练压缩器近似最优码率。 4.结合zero-shot方法CLIP&#xff0c;在Ima…

基于PCA的图像压缩实现

基于PCA的图像压缩实现 注&#xff1a;该内容为校内课程实验&#xff0c;仅供参考&#xff0c;请勿抄袭&#xff01; 源码&#xff1a;PPCA-for-Image-Compession 摘要   随着计算机互联网的发展和数据的日益增长&#xff0c;如何高效的处理和传输海量数据成为大数据处理的…

基于深度学习的图像压缩

近年来&#xff0c;深度学习在计算机视觉领域已经占据主导地位&#xff0c;不论是在图像识别还是超分辨重现上&#xff0c;深度学习已成为图片研究的重要技术&#xff0c;但它们的能力并不仅限于这些任务&#xff1b;现在深度学习技术已进入图片压缩领域。下面就说说神经网络在…

图像压缩算法

这里说​十种常用的图像压缩算法 数据压缩是保留相同或绝大部分数据前提下减小文件大小的过程。它的原理是消除不必要的数据或以更高效的格式重新组织数据。在进行数据压缩时&#xff0c;你可以选择使用有损方法或无损方法。有损方法会永久性地擦除掉一些数据&#xff0c;而无…

C#图像压缩相关方法总结

前往我的主页以获得更好的阅读体验C#图像压缩相关方法总结 - DearXuan的主页https://blog.dearxuan.com/2022/02/07/C-%E5%9B%BE%E5%83%8F%E5%8E%8B%E7%BC%A9%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95%E6%80%BB%E7%BB%93/ 前言 本文所描述的所有内容和算法&#xff0c;均未使用任…

Matlab实现图像压缩

文章和代码以及样例图片等相关资源&#xff0c;已经归档至【Github仓库&#xff1a;digital-image-processing-matlab】或者公众号【AIShareLab】回复 数字图像处理 也可获取。 文章目录 目的原理图像压缩原理离散余弦变换(DCT)图像压缩原理行程编码&#xff08;RLE&#xff09…

图像压缩相关内容简介

历史 图像压缩的研究起源于20世纪40年代。1948年香农的经典论文《通信的数学原理》中首次提到信息率深圳函数的概念&#xff0c;1959年他又建立了率失真理论&#xff0c;从而奠定了信源编码的理论基础。随后伯杰等人有对其进行了深入的研究&#xff0c;并取得了一定的进步&…

移动端做安全测试的重要性

安全性测试的目的是发现危害手机中数据的安全和完整性的错误和缺陷。发现安全错误通常是比较困难的,软件通常功能运行正常但却不安全。 一、软件权限 APP软件权限包括:网络通信、信息发送、自动启动、 媒体录制、读取用户信息、写入用户数据等权限,因关系到用户个人信息和隐私…

cad 打开硬件加速卡_CAD如何根据已知条件设计图形

1、打开CAD&#xff0c;在左下角把极轴追踪打开(鼠标右键点击&#xff0c;选择90度打√)、把对象捕捉打开(鼠标右键点击&#xff0c;选择中点)。 2、然后在操作界面画线&#xff0c;如图我们已知直角边885和750&#xff0c;方法是按长8852、高750来绘制三点定圆弧。先画8852177…

C#ObjectArx Cad将图形范围缩放至指定实体

先上代码&#xff08;亲测可用&#xff09;&#xff1a; /// <summary>/// 定位缩放值指定实体/// </summary>/// <param name"oid"></param>public static void Orientate(ObjectId oid){try{Entity current_entity GetEntity(oid);curren…

CAD图层设置

一、图层介绍 我们可以把图层想象为一张没有厚度的透明纸&#xff0c;各层之间完全对齐&#xff0c;一层上的某一基准点准确地对准其他各层上的同一基准点。用户可以给每一图层指定所用的线型、颜色&#xff0c;并将具有相同线型和颜色的对象放在统一图层&#xff0c;这些图层…

cad打印本计算机未配置,CAD打印的基本设置详细教程

CAD打印的基本设置详细教程 开始画图之前我们就考虑到打印的需要&#xff0c;要用多大纸张&#xff0c;打印比例应该设置成多少&#xff0c;打印后的字高、线宽、颜色应该设置成多少&#xff0c;在绘制图形的时候&#xff0c;这些为打印而做的准备工作必须做好。要想正确地打印…

CAD打印图形、输出图形

打印图形 指定打印范围、打印比例、图纸大小、打印样式、页边距等参数&#xff0c;打印图纸。 1.单击常用工具栏的“打印图形”按钮。 2.在命令行中输入Plot&#xff0c;按回车键。 打印界面如下 &#xff1a; 界面信息 &#xff08;1&#xff09;选择打印机&#xff1a;默…