import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class PicCompression
{
/**
* 压缩图片方法
*
* @param oldFile 要压缩的图片路径
* @param newFile 压缩后添加的后缀名(在扩展名前添加,不会改变格式)
* @param width 压缩宽
* @param height 压缩高
* @param percentage 是否等比例压缩,true则宽高比自动调整
* @return
* @throws Exception
*/
public static void reduceImg(String oldFile, String newFile, int widthdist, int heightdist, boolean percentage)
{
try
{
File srcfile = new File(oldFile);
if (!srcfile.exists())
{
return;
}
Image src = javax.imageio.ImageIO.read(srcfile);
if (percentage)
{
// 为等比压缩计算输出的宽高
double rate1 = ((double)src.getWidth(null)) / (double)widthdist + 0.1;
double rate2 = ((double)src.getHeight(null)) / (double)heightdist + 0.1;
double rate = rate1 > rate2 ? rate1 : rate2;
int new_w = (int)(((double)src.getWidth(null)) / rate);
int new_h = (int)(((double)src.getHeight(null)) / rate);
// 设定宽高
BufferedImage tag = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
// 设定文件扩展名
String filePrex = oldFile.substring(0, oldFile.lastIndexOf('.'));
newFile = filePrex + "SCALE_AREA_AVERAGING" + oldFile.substring(filePrex.length());
// 生成图片
// 两种方法,效果与质量都相同,效率差不多
// tag.getGraphics().drawImage(src.getScaledInstance(widthdist,heightdist, Image.SCALE_SMOOTH), 0, 0,
// null);
tag.getGraphics()
.drawImage(src.getScaledInstance(new_w, new_h, Image.SCALE_AREA_AVERAGING), 0, 0, null);
FileOutputStream out = new FileOutputStream(newFile);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
out.close();
}
else
{
// 设定宽高
BufferedImage tag = new BufferedImage(widthdist, heightdist, BufferedImage.TYPE_INT_RGB);
// 设定文件扩展名
String filePrex = oldFile.substring(0, oldFile.lastIndexOf('.'));
newFile = filePrex + "SCALE_AREA_AVERAGING" + newFile + oldFile.substring(filePrex.length());
// 生成图片
// 两种方法,效果与质量都相同,第二种效率比第一种高,约一倍
// tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0,
// null);
tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_AREA_AVERAGING),
0,
0,
null);
FileOutputStream out = new FileOutputStream(newFile);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
out.close();
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
public static void main(String[] args)
{
PicCompression.reduceImg("D:/30.jpg", "D:/20.jpg", 600, 600, true);
System.out.print("ok…");
}
}
- 浏览: 164281 次
- 性别:
- 来自: 南京
最新评论
-
unitleader:
...
SVN 提交文件加锁 -
javasea2012:
[list][*]引用[b][u]引用[/u][/b][/li ...
JAVA中线程同步的方法 -
xiejin2008:
嘿嘿,你是面试的哪个部门呀··
百度面试 -
Ryan200909:
远程主机无响应!!!!
java 开发所需的jar包库 -
forrest420:
sorry,想给个顶的,点击错了,资料蛮有用的
tar zip 打包、压缩与解压缩到指定目录的方法
相关推荐
用C++实现的压缩、解压缩算法,只有几个cpp、h文件,非常小巧,方便学习算法用。实现jpeg图像压缩,将灰度图数据转为jpeg压缩格式的编码文件
在图像处理领域,JPEG(Joint Photographic Experts Group)是一种广泛使用的有损压缩标准,尤其适用于照片和其他连续色调的图像。本项目是用C++语言实现的JPEG压缩算法,旨在帮助开发者理解和应用JPEG压缩技术。...
相反,JPEG是一种有损压缩格式,通过牺牲一定的图像质量来实现较小的文件尺寸,适合于网络浏览和存储。 要进行批量转换,我们可以利用专门的工具,如压缩包内的“BMP转JPG批量转换器.exe”。这类软件允许用户一次性...
在标题和描述中提到的"将bmp,png,jif,jpge等格式图片转换为cur,ico的软件",是指能够处理不同图像格式,尤其是将常见的静态图像格式转换为Windows操作系统中的光标(cur)和图标(ico)文件的工具。这些特定的格式有...
3、两个相同的图片压缩的结果也相同。 4、经过压缩的图片会被加添“已压缩”标记,该标记只被本工具识别,方便下次压缩时跳过此图片。 5、“自动调整图片方向”功能会旋转图片像素。 6、压缩图片不会修改图片的创建...
在IT行业中,设备发送的JPEG图片数据流通常涉及到图像处理、网络通信以及用户界面的开发。这个场景描述了一个过程,即远程或本地设备通过网络或其他通信方式向电脑发送JPEG格式的图片数据,然后在电脑端进行显示。在...
JPEG(Joint Photographic Experts Group)是一种广泛使用的有损压缩图像文件格式,主要用于存储照片和其他高质量的图像。在本文中,我们将深入探讨JPEG图片的读取和写入过程,以及相关编程实现。 首先,JPEG文件的...
它支持多种压缩算法,可以在不同网络环境下提供流畅的观看体验。 2. **AVI (Audio Video Interleave)**:由微软创建的开放标准,能同时存储音频和视频数据。AVI格式的兼容性较强,但文件体积通常较大。 3. **FLV ...
JPEG(Joint Photographic Experts Group)是一种广泛使用的有损图像压缩标准,它在存储和传输图像时提供了较高的压缩比,降低了存储空间的需求。本项目提供的是一套适用于STM32微控制器的C语言实现的小型JPEG解码器...
【JPEG大图分割】指的是在JPEG格式的图片中进行信息隐藏的技术,这使得重要的信息能够被安全地存储在图片中,提高保密性。JPEG是一种广泛使用的静态图像压缩标准,由ISO/IEC联合图像专家组制定,适用于连续色调的...
JPEG则是一种广泛应用于网络和数字媒体的有损压缩格式,适合存储照片和连续色调的图像。 【描述解析】 描述中提到icepdf能够很好地将PDF转换为单个或多个TIFF图片,并且还支持转换为JPEG格式。这暗示了icepdf库提供...
而JPEG(Joint Photographic Experts Group)是一种广泛使用的有损图像压缩格式,特别适合于存储照片和高质量的图像。 首先,为了在MFC程序中显示JPEG图片,我们需要包含必要的头文件和库。在C++源文件中,引入`#...
【描述】中提到的"这是一个从网上下载下来后,经过我的加工后的比较完整的JPGE压缩程序",这可能意味着该压缩包包含了一个或多个用于处理JPEG图像的软件工具或库,这些工具可能包括图像压缩、解压缩、编辑或转换功能...
这里的串口摄像头采集通讯软件,它的主要任务是建立和管理串口与摄像头之间的数据传输,将串口接收到的数据转化为可读的图像格式,如描述中提到的“jpg”图片格式。这在实时监控、远程控制等领域有广泛应用。 ...
1. **JPEG(JPG)格式**:JPEG是一种有损压缩的图像格式,它通过牺牲部分图像质量来达到较高的压缩率,适合存储照片和其他色彩丰富的图像。JPEG文件通常具有较小的文件大小,便于网络传输和存储。 2. **Bitmap(BMP...
在Linux环境下,将UYUV格式的图片转换为JPEG格式是一个常见的图像处理任务,尤其是在多媒体处理、视频编码或图像分析等领域。UYVY是一种4:2:2的彩色空间格式,常用于数字视频,而JPEG(Joint Photographic Experts ...
DependHex 是一个PE分析工具, ...支持显示图片格式:bmp,ico,jpge,png,gif,cursor. 清单文件之类信息获取.等等... 未完成功能: debug信息获取... ********注:经过 upx压缩过的pe部分图形资源不能获取。