在网上看了一些压缩图片的实例后,再结合公司项目写了一个感觉比较理想的压缩图片小程序。
package demo.awt.image; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.image.ConvolveOp; import java.awt.image.Kernel; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.regex.Pattern; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class CompressImageEngine { public static void main(String[] args) { String oldFile = "D:\\我的文档\\My Pictures\\5.jpg"; } /** * 压缩图片方法一(高质量) * @param oldFile 将要压缩的图片 * @param width 压缩宽 * @param height 压缩高 * @param smallIcon 压缩图片后,添加的扩展名(在图片后缀名前添加) * @param quality 压缩质量 范围:<i>0.0-1.0</i> 高质量:<i>0.75</i> 中等质量:<i>0.5</i> 低质量:<i>0.25</i> * @param percentage 是否等比压缩 若true宽高比率将将自动调整 */ public static void compressImage(String oldFile, int width, int height, String smallIcon, float quality, boolean percentage) { try { File file = new File(oldFile); /* 验证文件是否存在 */ if(!file.exists()) throw new FileNotFoundException("找不到原图片!"); /* 获取图片信息 */ BufferedImage image = ImageIO.read(file); int orginalWidth = image.getWidth(); int orginalHeight = image.getHeight(); /* 验证压缩图片信息 */ if (width <= 0 || height <= 0 || !Pattern.matches("^[1-9]\\d*$", String.valueOf(width)) || !Pattern.matches("^[1-9]\\d*$", String.valueOf(height))) throw new Exception("图片压缩后的高宽有误!"); /* 等比压缩 */ if (percentage) { double rate1 = ((double) orginalWidth) / (double) width + 0.1; double rate2 = ((double) orginalHeight) / (double) height + 0.1; double rate = rate1 > rate2 ? rate1 : rate2; width = (int) (((double) orginalWidth) / rate); height = (int) (((double) orginalHeight) / rate); } /* 压缩后的文件名 */ String filePrex = oldFile.substring(0, oldFile.lastIndexOf('.')); String newImage = filePrex + smallIcon + oldFile.substring(filePrex.length()); /* 压缩文件存放位置 */ File savedFile = new File(newImage); /* 创建一个新的文件 */ savedFile.createNewFile(); /* 创建原图像的缩放版本 */ Image image2 = image.getScaledInstance(width, height, Image.SCALE_AREA_AVERAGING); /* 創建数据缓冲区图像 */ BufferedImage bufImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); /* 创建一个Graphics2D */ Graphics2D g2 = bufImage.createGraphics(); /* 重绘图像 */ g2.drawImage(image2, 0, 0, width, height, null); g2.dispose(); /* 过滤像素矩阵 */ float[] kernelData = { -0.125f, -0.125f, -0.125f, -0.125f, 2, -0.125f, -0.125f, -0.125f, -0.125f }; Kernel kernel = new Kernel(3, 3, kernelData); /* 按核数学源图像边缘的像素复制为目标中相应的像素输出像素 */ ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); /* 转换像素 */ bufImage = cOp.filter(bufImage, null); FileOutputStream out = new FileOutputStream(savedFile); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufImage); /* 设置压缩质量 */ param.setQuality(quality, true); encoder.encode(bufImage, param); out.close(); System.out.println(newImage); } catch (Exception e) { e.printStackTrace(); System.out.println("压缩失败!" + e.getMessage()); } } }
相关推荐
在这个“kindeditor(带压缩图片功能)”的压缩包中,很可能包含了已经集成图片压缩功能的KindEditor源码或者插件。 在Web开发中,富文本编辑器是非常常见的一种组件,用于让用户在网页上像在桌面应用中那样编辑文本...
- 图片分享:在图片分享功能中,压缩图片可减少流量消耗,提升用户体验。 - 数据备份:在备份大量图片时,压缩可以节省存储空间。 综上所述,Luban是一个针对Android平台的高效图片压缩工具,它通过智能压缩算法...
通过创建一个目标尺寸的BufferedImage对象,然后使用`Graphics2D`的`drawImage()`方法将原图绘制到新尺寸的BufferedImage上,从而实现按指定宽度和高度压缩图片。 ```java import java.awt.Graphics2D; import java...
### C# .Net压缩图片,大小仅为原图的1/10 在现代软件开发过程中,尤其是在处理多媒体数据时,图像处理技术变得尤为重要。很多时候,我们需要处理大量的图像数据,而这些图像往往占用较大的存储空间。因此,如何有效...
这个过程涉及到多个技术环节,包括捕获图像、压缩图片、转换数据格式以及将图片文件提交到服务器。以下是对这些知识点的详细解释: 1. **HTML5 Camera API**:H5提供了`<input type="file">`元素的`accept`属性,...
Java批量压缩图片格式的PDF档(源码Demo) 适用:仅针对纯图片型的pdf(类似扫描版)进行压缩 原理:压缩图片然后再另存成新文件 实例如下: ├── META-INF │ └── MANIFEST.MF ├── pom.xml └── src ├...
在Android开发中,图片处理是一项常见且重要的任务,特别是在移动设备资源有限的情况下,高效地压缩图片以节省存储空间和提高应用性能是必要的。本篇主要介绍如何基于JNI(Java Native Interface)技术实现图片的...
"layer+压缩图片js" 是一个结合了Layer弹框插件和图片压缩功能的JavaScript解决方案,它允许开发者在用户选择图片后立即进行压缩,然后再进行上传。下面我们将详细探讨这个方案所涉及的关键知识点。 1. **Layer弹框...
在本文中,我们将深入探讨如何使用OpenCV来压缩图片,这对于初学者来说是一个非常实用的知识点。 首先,我们需要理解图片压缩的基本概念。图片压缩主要是为了减少存储空间,有两种主要的压缩类型:无损压缩和有损...
在这个场景中,"delphi源码压缩图片bmp,jpg至640,480jpg修正"涉及到的核心知识点包括: 1. **Delphi编程**:Delphi是基于Pascal语言的IDE,它提供了快速的应用程序开发(RAD)环境,用于创建桌面、移动和Web应用...
EGCodec.createJPEGEncoder(out); JPEGEncodeParam param = ...总的来说,这段Java代码提供了一个实用的工具,能够在不失真过大(通过调整压缩质量)的前提下,根据图片原始大小智能地压缩图片,满足不同场景的需求。
"图片压缩软件【压缩图片】"是一款专注于减小图片文件大小的应用程序,它通过特定的算法在保持图像质量可接受的前提下,降低文件的存储需求。 图片压缩主要分为两种类型:有损压缩和无损压缩。有损压缩如JPEG,会在...
以下是一个简单的示例代码,展示如何使用TBitmap.Canvas.DrawBitmap来压缩图片: ```pascal uses FMX.Graphics; var OriginalBitmap, CompressedBitmap: TBitmap; SourceRect, DestinationPoint: TRectF; begin...
为了实现按比例压缩图片的同时保持清晰度,我们需要采用一些特殊的技术和策略。以下将详细介绍如何在PHP中实现这一目标。 1. 图片压缩原理: 图片压缩主要分为有损压缩和无损压缩两种。有损压缩(如JPEG)会丢失...
在IT行业中,图像处理是一项非常重要的技术,尤其是在移动设备和网络应用中,高效地压缩图片以减少存储空间和传输成本是必要的。本话题主要聚焦于使用Delphi编程语言进行图片(BMP和JPG格式)的压缩,目标是将图片...
java 开发压缩图片文件大小,2m-->200k 不是压缩宽高的
"压缩图片工具,只支持png压缩.rar"这个压缩包文件提供了一个专门针对PNG格式图片进行压缩的工具。PNG(Portable Network Graphics)是一种无损压缩的位图格式,广泛用于网页设计、图形用户界面以及需要透明背景的...
要使用lrz压缩图片并上传至七牛云,首先需要在七牛云注册账号,创建空间(Bucket),获取Access Key和Secret Key。然后,在前端项目中引入lrz库,并配置七牛的上传凭证。当用户选择图片后,lrz会自动进行压缩,压缩...
Java压缩图片util,可等比例宽高不失真压缩,也可直接指定压缩后的宽高,只能用炫酷来形容,感兴趣就下载看看吧
标题中的“用来压缩图片大小的工具”指的是一个用于减小图像文件体积的软件或应用程序,主要针对的是JPEG(jpg)格式的图片。在数字图像处理领域,图片的大小往往受到像素数量、颜色深度以及压缩算法的影响。这类...