论坛首页 Java企业应用论坛

等比例图片压缩算法

浏览 13317 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-01-04   最后修改:2009-01-04

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

}

   发表时间:2009-01-05  
啥算法???
0 请登录后投票
   发表时间:2009-01-05  
http://www.iteye.com/topic/309509这个不是算法吧,只是根据一个系数把图的长宽变了一下
0 请登录后投票
   发表时间:2009-07-30  
楼主  貌似以前XYTX里面用到了这个吧
PS:一不小心,发了个水贴,被扣了30分,有点无语,多了点吧!
0 请登录后投票
   发表时间:2009-08-02  
lz的算法看起来很朴素。

建议lz有空研究一下这3个算法:1、nearest,2、bilinear,3、bicubic。
0 请登录后投票
   发表时间:2009-08-13  
cn-done 写道
楼主  貌似以前XYTX里面用到了这个吧
PS:一不小心,发了个水贴,被扣了30分,有点无语,多了点吧!

坚强水贴,呵呵
0 请登录后投票
   发表时间:2009-08-13  
jiudian30 写道
lz的算法看起来很朴素。

建议lz有空研究一下这3个算法:1、nearest,2、bilinear,3、bicubic。

谢谢赐教,呵呵。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics