日期:2014-05-20  浏览次数:20802 次

有问题,我给一个50K的图片加了个水印后她就变成100多K了,有人对BufferedImage熟悉点吗?
package   j2src;

import   java.*;
import   java.io.*;

import   javax.*;

import   com.sun.image.codec.jpeg.*;

public   class   ShuiYin   {
public   static   void   main(String[]   args)  
  {  
    createMark( "c:/photo.JPG ", "c:/水印.gif ");    
  }  
  /**
    *   在图片上添加水印图片和文字
    *   @param   filePath   原图片文件路径
    *   @param   watermark   水印图片文件路径
    *   @return   添加成功返回true,否则返回false
    */
  public   static   boolean   createMark(String   filePath,   String   watermark)  
  {
    //读取原图片
    ImageIcon   imgIcon   =   new   ImageIcon(filePath);
    Image   theImg   =   imgIcon.getImage();
    //读取标签图片
    ImageIcon   waterIcon   =   new   ImageIcon(watermark);
    Image   waterImg   =   waterIcon.getImage();
   
//     int   width   =   theImg.getWidth(null);
//     int   height   =   theImg.getHeight(null);
   
    //创建一个和原图片同大小的新空白图片
    //BufferedImage   bimage   =   new   BufferedImage(600,   450,BufferedImage.TYPE_INT_RGB);
    BufferedImage   bimage   =   new   BufferedImage(600,   450,BufferedImage.TYPE_INT_BGR);
    Graphics2D   g   =   bimage.createGraphics();
    //设置字体
    //Font   font   =   new   Font( "SansSerif ",Font.BOLD,30);
    //g.setFont(font);
    //设置前景色
    g.setColor(Color.red);
    //设置背景色
    g.setBackground(Color.white);
    //画原图
    g.drawImage(theImg,   0,   0,   null);
    //画水印图
    g.drawImage(waterImg,   470,   30,   null);
    //画字
//     g.drawString( "中国人民共和国 ",   10,   10);    
    g.dispose();
    FileOutputStream   out   =   null;
    try   {
      out   =   new   FileOutputStream(filePath);
      JPEGImageEncoder   encoder   =   JPEGCodec.createJPEGEncoder(out);
      JPEGEncodeParam   param   =   encoder.getDefaultJPEGEncodeParam(bimage);
      param.setQuality(50f,   true);
      encoder.encode(bimage,   param);      
    }
    catch   (Exception   e)  
    {
      return   false;
    }
    finally
    {
      if(out!=null)
      {
        try
        {
          out.close();
          out   =   null;
        }
        catch(Exception   e)
        {}
      }