等比例图片压缩算法

图片不失真的等比例压缩算法:
算法思想:根据压缩基数和压缩比来压缩原图,生产一张图片效果最接近原图的缩略图。
算法讲解:
public void saveMinPhoto(String srcURL,String deskURL,double comBase,double scale){
/*srcURl 原图地址;deskURL 缩略图地址;comBase 压缩基数;scale 压缩限制(宽/高)比例*/
java.io.File srcFile = new java.io.File(srcURL);
Image src = new javax.imageio.ImageIO.read(srcFile);
int srcHeight = src.getHeight(null);
int srcWidth = src.getWidth(null);
int deskHeight = 0;//缩略图高
int deskWidth = 0;//缩略图宽
double srcScale = (double)srcHeight/srcWidth;
if((double)srcHeight>comBase || (double)srcWidth>comBase){
if(srcScale>=scale || 1/srcScale>scale){
if(srcScale>=scale){
deskHeight = (int)comBase;
deskWidth = srcWidth*deskHeight/srcHeight;
}else{
deskWidth = (int)comBase ;
deskHeight = srcHeight*deskWidth/srcWidth;
}

} else {
if((double)srcHeight>comBase){
deskHeight = (int)comBase;
deskWidth = srcWidth*deskHeight/srcHeight;
} else{
deskWidth = (int)comBase ;
deskHeight = srcHeight*deskWidth/srcWidth;
}

}
}else {
deskHeight = srcHeight;
deskWidth = srcWidth;

}
BufferedImage tag = new BufferedImage(deskWidth, deskHeight,
BufferedImage.TYPE_3BYTE_BGR);
tag.getGraphics().drawImage(src, 0, 0, deskWidth, deskHeighth, null); //绘制缩小后的图
FileOutputStream deskImage = new FileOutputStream(deskURL); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec
.createJPEGEncoder(deskImage);
encoder.encode(tag); //近JPEG编码
deskImage.close();

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值