"该资源提供了一种在Java后端对上传的图片进行压缩的方法,而不会改变图片的像素。主要适用于jpg、bmp、png和gif格式的图片。代码示例包含了一个名为`CompressPicDemo`的类,该类具备图片压缩的功能,支持设置输入和输出目录、输入和输出文件名、输出图片的宽度和高度,以及是否保持原图比例。" 在Java开发中,处理图片上传并进行压缩是常见的需求,特别是在网站或应用中为了减少服务器存储空间和提高加载速度。此代码段提供了一个简单的解决方案,通过使用Java的内置图像处理库`java.awt.image`和`javax.imageio`来实现图片压缩。 首先,`CompressPicDemo`类定义了一些关键变量,如原始文件对象`file`,输入目录`inputDir`,输出目录`outputDir`,输入文件名`inputFileName`,输出文件名`outputFileName`,以及期望的输出图片尺寸`outputWidth`和`outputHeight`。此外,还有`proportion`布尔变量,用于指示是否保持原始图片的比例。 当调用`compressPic`方法时,它将读取指定路径的输入图片,根据给定的宽高参数调整大小,并保存到指定的输出路径。如果`proportion`为`true`(默认值),则会按比例缩放图片,以确保不改变原始像素比例。如果不保持比例,图片可能会被拉伸或裁剪以适应指定的尺寸。 在压缩过程中,`JPEGCodec`和`JPEGImageEncoder`类用于处理JPEG格式的图片,这是Java提供的JPEG编码器,可以将处理后的图像数据编码成JPEG格式并写入到输出流中。对于其他格式如bmp、png和gif,可以使用`ImageIO`类进行相应的编码和写入操作。 这个方法虽然简单,但适用于大多数基本的图片压缩场景。然而,对于更复杂的图片处理需求,例如滤镜应用、旋转、裁剪等,可能需要使用更强大的库,如Apache Commons Imaging(前身是Sanselan)或OpenCV等。 这段代码提供了一个基础的图片压缩工具,开发者可以通过修改`CompressPicDemo`类的参数来适应不同的图片压缩需求,以达到优化存储和加载性能的目的。同时,这也为更深入的图片处理学习提供了良好的起点。
* 缩略图实现,将图片(jpg、bmp、png、gif等等)真实的变成想要的大小
*/
package com.joewalker.test;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/*******************************************************************************
* 缩略图类(通用) 本java类能将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换。 具体使用方法
* compressPic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))
*/
public class CompressPicDemo {
private File file = null; // 文件对象
private String inputDir; // 输入图路径
private String outputDir; // 输出图路径
private String inputFileName; // 输入图文件名
private String outputFileName; // 输出图文件名
private int outputWidth = 100; // 默认输出图片宽
private int outputHeight = 100; // 默认输出图片高
private boolean proportion = true; // 是否等比缩放标记(默认为等比缩放)
public CompressPicDemo() { // 初始化变量
inputDir = "";
outputDir = "";
outputFileName = "";
outputWidth = 100;
outputHeight = 100;
}
public void setInputDir(String inputDir) {
this.inputDir = inputDir;
}
public void setOutputDir(String outputDir) {
this.outputDir = outputDir;
}
public void setInputFileName(String inputFileName) {
this.inputFileName = inputFileName;
}
public void setOutputFileName(String outputFileName) {
this.outputFileName = outputFileName;
}
public void setOutputWidth(int outputWidth) {
this.outputWidth = outputWidth;
}
public void setOutputHeight(int outputHeight) {
this.outputHeight = outputHeight;
}
public void setWidthAndHeight(int width, int height) {
this.outputWidth = width;
this.outputHeight = height;
}
/*
* 获得图片大小
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展