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…");
}
}
- 浏览: 159530 次
- 性别:
- 来自: 南京
最新评论
-
unitleader:
...
SVN 提交文件加锁 -
javasea2012:
[list][*]引用[b][u]引用[/u][/b][/li ...
JAVA中线程同步的方法 -
xiejin2008:
嘿嘿,你是面试的哪个部门呀··
百度面试 -
Ryan200909:
远程主机无响应!!!!
java 开发所需的jar包库 -
forrest420:
sorry,想给个顶的,点击错了,资料蛮有用的
tar zip 打包、压缩与解压缩到指定目录的方法
JPGE图片压缩
- 博客分类:
- Java
相关推荐
压缩算法简介 1. 色彩模型 2. DCT (离散余弦变换) 3. 重排列 DCT 结果 4. 量化 5. 0 RLE 编码 6. 范式 Huffman 编码 7. DC 的编码
用C++实现的压缩、解压缩算法,只有几个cpp、h文件,非常小巧,方便学习算法用。实现jpeg图像压缩,将灰度图数据转为jpeg压缩格式的编码文件
图片bmp格式转jpge格式,批量 测试资源
用C++实现的压缩、解压缩算法,只有几个cpp、h文件,非常小巧,方便学习算法用。
2.5 分析不同图像可以实现的压缩率,并把压缩前和压缩后图像对比显示,观察视觉信息丢失。 3. 高级要求: 3.1 实现编码器可通过调整控制参数的方式改变压缩率,比如控制量化参数。 3.2 实现zigzag扫描,DC系数的DPCM...
小波JPEG2000图像压缩技术实例,Delphi源码..rar
JPGE 转 RGB 格式 图像
JPEG图像压缩,采用霍夫曼编码,给出压缩比和压缩效率,MATLAB代码
资源名:MATLAB实现JPEG压缩算法程序源码.zip 资源类型:程序源代码 源码说明: 用MATLAB实现JPEG图像压缩算法,包括DCT变换,霍夫曼变换等算法,包含完整源码和注释,非常适合借鉴学习 适合人群:新手及有一定经验...
纯内存操作解压JPGE 很早之前收录的 并非原创 共享给大家
YUV数据压缩至JPGE,压缩率及清晰度可调整。
本工具用于压缩由手机或数码相机拍摄的照片。这些设备优先考虑拍摄速度,只对照片做简单的...6、压缩图片不会修改图片的创建时间与修改时间。 7、被压缩的图片仍保留附加属性,例如:相机型号、光圈值、曝光时间 等。
将bmp,png,jif,jpge等格式图片转换为cur,ico的软件,方便好用
数字水印 攻击 JPEG压缩 matlab代码
一个jpeg解码程序。部分程序移植子jpge group的文档。gcc下编译通过
利用icepdf很好的将pdf转换成一个或者多个tif格式图片,同时支持将pdf转换成jpge格式图片,很好解决pdf中内嵌字问题
设备发送的jpeg图片数据流,在电脑端显示
测试视屏后缀wmv,avi,flv,rm,rmvb,mpeg,ts,mp4,图片后缀jpg,png,gif,jpeg,jpge。
jpeg读写,程序比较简单,可以用来借鉴学习
开发板上移值的Fatfs文件系统,版本为Fatfs0.07,Jpeg,BMP解码显示,使用STM32固件库V3.4,MDK4.12 刚刚测试了一下,不错. 不过把有的LCD初始化去掉了,不好的. 我现在把增加了的填上.可支持4531,1505,9325,9320,5408...