1、图片压缩
//图片压缩
public static void imageCompress(String path,String newPath,String fileName,String toFileName,float scale,int width,int height){
imageCompress(path,newPath, fileName, toFileName, scale, 0.75f, width, height);
}
/**
* 描述:
* @param path 需要压缩的图片路径
* @param fileName 要压缩的图片名称
* @param toFileName 压缩后的图片名称
* @param scale 压缩比例 不能大于1,默认0.5
* @param quality 压缩品质介于0.1~1.0之间
* @param width 压缩后的图片的宽度
* @param height 压缩后的图片的高度
* 返回值:void
*/
private static void imageCompress(String path,String newPath, String fileName,String toFileName,float scale,float quality,int width,int height){
FileOutputStream out = null;
try {
Image image = javax.imageio.ImageIO.read(new File(path +"/"+ fileName));
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
if(scale >=1.0) scale = 0.99f;//默认压缩比为0.5,压缩比越大,对内存要去越高,可能导致内存溢出
//按比例计算出来的压缩比
float realscale = getRatio(imageWidth,imageHeight,width,height);
float finalScale = Math.min(scale, realscale);//取压缩比最小的进行压缩
imageWidth = (int)(finalScale*imageWidth);
imageHeight = (int)(finalScale*imageHeight);
image = image.getScaledInstance(imageWidth, imageHeight, Image.SCALE_AREA_AVERAGING);
BufferedImage mBufferedImage = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = mBufferedImage.createGraphics();
g2.drawImage(image, 0, 0,imageWidth, imageHeight, Color.white,null);
g2.dispose();
float[] kernelData2 = {-0.125f, -0.125f, -0.125f,-0.125f,2, -0.125f,-0.125f,-0.125f, -0.125f };
Kernel kernel = new Kernel(3, 3, kernelData2);
ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
mBufferedImage = cOp.filter(mBufferedImage, null);
out = new FileOutputStream(newPath+"/" + toFileName);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(mBufferedImage);
param.setQuality(quality, true);//默认0.75
encoder.setJPEGEncodeParam(param);
encoder.encode(mBufferedImage);
}catch (FileNotFoundException fnf){
fnf.printStackTrace();
}catch (IOException ioe){
ioe.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static float getRatio(int width,int height,int maxWidth,int maxHeight){
float Ratio = 1.0f;
float widthRatio ;
float heightRatio ;
widthRatio = (float)maxWidth/width;
heightRatio = (float)maxHeight/height;
if(widthRatio<1.0 || heightRatio<1.0){
Ratio = widthRatio<=heightRatio?widthRatio:heightRatio;
}
return Ratio;
}
/**
* 动态获取压缩比列根据宽度
* @param map
* @return
*/
public static float getCompressSize(float width){
float result = 0.5f;
result = 595/width;
result = Float.parseFloat(StringUtil.formatNumber("#.##", result));
return result;
}
/**
* 计算图片尺寸大小等信息:w宽、h高、s大小。异常时返回null。
*
* @param imgpath 图片路径
* @return 图片信息map
*/
public static Map getImgInfo(InputStream fis) throws Exception {
Map map = new HashMap();
BufferedImage buff = ImageIO.read(fis);
map.put("w", new Long(buff.getWidth()* 1L)); //宽度
//map.put("h", new Long(buff.getHeight()* 1L)); //高度
//map.put("s", new Long(imgfile.length())); //获取图片大小
fis.close();
return map;
}
分享到:
相关推荐
java 图片压缩 图片切割
java操作图片的工具类,包括图片放大缩小、图片裁剪、打水印(文字水印和图片水印)
这个系统可能包含了文件浏览器组件、图片预览功能、以及一些基本的图片操作选项,如旋转、缩放等。下面将详细介绍这个系统可能涉及的技术点和相关知识。 1. **Java基础**:作为系统的开发语言,Java提供了丰富的...
本资源“java对图片进行操作.rar”提供了一种用Java进行图像操作的工具类,特别关注于图片的剪裁、重置大小以及按比例缩小等功能。以下是关于这些功能的详细解释和实现方法。 首先,图片剪裁是调整图像大小并提取其...
Java图片生成器是一种基于Java编程语言的工具,用于创建、编辑或转换图像文件。这个工具可能包含各种功能,如绘制图形、添加文字、处理图像效果、读取和写入不同图像格式等。在Java中实现图片生成器涉及到对Java 2D ...
java实现对图片裁剪,并把裁剪新图片保存,按倍率缩小、放大图片,重置图形的边长大小,拼接图片等等操作 使用Java进行图像处理的一些基础操作,java实现对图片的各种操作下载
在标签中,作者列出了四个关键词:“java 处理图片背景颜色”、“java 图片背景颜色替换”、“java 图片背景颜色更改”、“java 蓝底寸照批量转换为白底”,这些关键词都与 Java 处理图片背景颜色相关。 在部分内容...
然后,可以调用Java的图片处理函数,对保存的图片进行操作。最后,返回处理后的图片路径或者直接显示在页面上。 在实际应用中,我们还需要考虑性能优化,比如使用内存缓存减少磁盘I/O,或者使用多线程处理大量图片...
在java中通过ImageMagick...在wiondows操作系统java开发环境中可通过ImageMagick安装包和im4java.jar把其他格式图片如pdf转换为PNG,JPEG等常用格式图片。操作其实比较简单。内附有操作步骤及图片转换文件大小的调整。
本篇将详细介绍如何使用Java来操作Word和PDF文档,并在其中的图片上生成水印。 首先,我们关注的是Java对Word文档的操作。Apache POI是一个非常流行的Java库,用于读写Microsoft Office格式的文件,包括Word(.docx...
在Java编程环境中,对JPEG图片进行操作是一项常见的任务,尤其在进行课程设计时,学习如何处理图像文件是非常有价值的。JPEG是一种广泛使用的有损压缩图像格式,适用于存储照片和其他高质量图像。在这个项目中,我们...
根据给定文件的信息,本文将围绕Java操作图片的方法展开,主要涵盖往图片上添加文字以及合并多张图片的功能。这些技术在制作许可证书、安全证书等应用场景中非常实用。 ### Java操作图片概述 #### 一、加载图片 在...
本实例将详细介绍如何使用Java和MySQL进行图片的存取操作。 首先,让我们了解MySQL中的BLOB类型。BLOB是一个用来存储大量二进制数据的字段类型,它不受字符集的限制,适合存储图像、音频或视频文件等。MySQL提供了...
在Java编程中,将图片写入Excel文件是一项常见的任务,特别是在数据分析、报表生成或数据可视化的情景下。这里,我们将详细探讨如何实现这个功能,主要依赖于`Apache POI`库来操作Excel,并结合`JFreeChart`库来创建...
总的来说,这个Java图片浏览器项目体现了面向对象编程的原则,结合了文件I/O、GUI设计和图片处理技术,展示了Java在开发桌面应用程序方面的强大能力。同时,其优化的内存管理策略使得该应用能够适应各种规模的图片...
Xuggler是基于C++的FFmpeg库的一个Java封装,它允许开发者直接在Java中操作音视频流。ffmpeg4java则是对FFmpeg命令行工具的Java包装,通过执行命令行指令实现视频处理。这两种库都能很好地完成图片转视频的任务。 ...
总结起来,Java实现图片上传涉及的关键技术有:文件操作(File类)、HTTP请求(Multipart编码)、服务器端文件处理(如Apache Commons FileUpload)、存储策略(文件系统或云存储)以及安全性与性能优化(如文件大小...
在Java编程语言中,图片裁剪是一项常见的图像处理任务,主要涉及到对图像的选取和截取,以便获得图像的一部分或按...理解基本概念,掌握常用库的使用,并了解如何优化和处理异常情况,是成功实现Java图片裁剪的关键。
1. **图片读取**:使用Java的`BufferedImage`类读取图片文件,或者使用第三方库如`ImageIO`进行更高效的操作。 2. **帧序列创建**:将每张图片转换为FFmpeg可识别的帧格式,通常为JPEG或PNG。 3. **视频参数设置**:...
以下是一个简单的Java图片压缩示例: ```java import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class ImageCompressor { public ...