图片处理

根据帖子:http://www.iteye.com/topic/40971 整理

图片缩小处理

第一种方式缩小后质量很差

第二,三种方式缩小后很好

对图片的缩放一定要用 Image下的 getScaledInstance

Graphics下的 还有 AffineTransform下的 缩放都是针对"图形"而不是"图像"的

图形就是用java类画的线条等简单几何图形

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class Pic {
 
 public static void reduceImg(String imgsrc, String imgdist, int widthdist,  
            int heightdist) {  
        try {  
            File srcfile = new File(imgsrc);  
            if (!srcfile.exists()) {  
                return;  
            }  
            Image src = javax.imageio.ImageIO.read(srcfile);  
            int width = src.getWidth(null);  
            int height = src.getHeight(null);  
 
            if (width == widthdist && height == heightdist) {  
                FileUtils.copyFile(new File(imgsrc), new File(imgdist));  
                return;  
            }  
              
 
            double ws = (double) widthdist / (double) width;  
              
            double hs = (double) heightdist / (double) height;  
              
            BufferedImage tag=null;  
 
            tag = new BufferedImage((int) widthdist, (int) heightdist,  
                    BufferedImage.TYPE_INT_RGB);  
              
            Graphics2D g2d=(Graphics2D)tag.getGraphics();   

第一种方式
              
//            AffineTransform at=AffineTransform.getScaleInstance(ws,hs);  
//            RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,  RenderingHints.VALUE_ANTIALIAS_ON);      
//            g2d.transform(at);  
//            qualityHints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);    
//            qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);     
//
//            qualityHints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);  
//               
//            g2d.setRenderingHints(qualityHints);    
 // g2d.drawImage(src, 0, 0,  null);
 

第2种方式
            g2d.drawImage(src.getScaledInstance(widthdist, heightdist,  Image.SCALE_SMOOTH), 0, 0,  null);   
 

第3种方式
//          /         tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist,  Image.SCALE_AREA_AVERAGING), 0, 0,  null);
            FileOutputStream out = new FileOutputStream(imgdist);  
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
            encoder.encode(tag);  
            out.close();  
 
        } catch (IOException ex) {  
            ex.printStackTrace();  
        }  
    }  
 
 
 public static void main(String[] args)
 {
  Pic.reduceImg("c:/pic/1.gif","c:/pic/11.gif",48,48);
 }


}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值