等比例图片压缩算法

图片不失真的等比例压缩算法:
算法思想:根据压缩基数和压缩比来压缩原图,生产一张图片效果最接近原图的缩略图。
算法讲解:
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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值