java图片加水印的操作

/************************************************
* <p>java对图片的操作(只能使用jpg)</p>
* 对图片的签章<br>
* 对图片的缩图<br>
* <p>Title:java对图片的操作(只能使用jpg)</p>
* <p>CreateData: 2004-12-2</p>
* <p>Description:</p>
* <p>Copyright: Copyright (c) 2004</p>
* @author 王凯
* @version 1.0
***********************************************/
package com.cn.wangk.test;
 
import java.io.*;
 
import com.sun.image.codec.jpeg.*; //sun公司仅提供了jpg图片文件的编码api
 
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import javax.imageio.ImageIO;
 
/**
* @author wangkai
*/
public class Test {
 
   /**
   * 
   */
   public Test() {
     try {
       //生成以后新的图片地址
      File fo = new File( "c:\\4.jpg" );
       //读取的图片文件
      String imagePath = "C:\\Documents and Settings\\Administrator"
          + "\\My Documents\\My Pictures\\1.jpg" ;
       //盖章的图片文件
      String toimagepth = "C:\\1.jpg" ;
       //得到图片的文件流
      InputStream imageIn;
      imageIn = new FileInputStream( new File(imagePath));
       //得到输入的编码器,将文件流进行jpg格式编码
      JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);
       //得到编码后的图片对象
      BufferedImage image = decoder.decodeAsBufferedImage();
      Graphics g = image.getGraphics();
       try {
        InputStream imageIn2 = null ;
        imageIn2 = new FileInputStream( new File(toimagepth));
         //得到输入的编码器,将文件流进行jpg格式编码
        JPEGImageDecoder decoder2 = JPEGCodec
            .createJPEGDecoder(imageIn2);
         //得到编码后的图片对象
        BufferedImage image2 = decoder2.decodeAsBufferedImage();
 
         //加盖图片章
        ImageObserver obser = null ;
         int x = image.getWidth() - image2.getWidth();
         int y = image.getHeight() - image2.getHeight();
        g.drawImage(image2, x, y, obser);
      } catch (FileNotFoundException e) {
         //打开文件失败,表示章图片不存在,这时候直接加盖文件章(签名)
        g.setFont( new Font( "宋体" , Font.PLAIN, 18 ));
        g.drawString( "秋水工作室" , image.getWidth() - 100 ,
            image.getHeight() - 20 );
        g.drawString( "water_wang@xs.zj.cn" , image.getWidth() - 180 ,
            image.getHeight() - 10 );
      }
      g.dispose();
 
      ImageIO.write(image, "jpeg" , fo);
      System.out.println( "ok" );
    } catch (FileNotFoundException e) {
       // 自动生成 catch 块
      e.printStackTrace();
    } catch (ImageFormatException e) {
       // 自动生成 catch 块
      e.printStackTrace();
    } catch (IOException e) {
       // 自动生成 catch 块
      e.printStackTrace();
    }
 
  }
 
   public static void saveFixedBoundIcon(File imageFile, int height, int width)
       throws Exception {
     double Ratio = 0.0 ;
     if (imageFile == null || !imageFile.isFile())
       throw new Exception(imageFile + "找不到指定的文件!" );
    String filePath = imageFile.getPath();
    BufferedImage Bi = ImageIO.read(imageFile);
 
     if ((Bi.getHeight() > height) || (Bi.getWidth() > width)) {
       if (Bi.getHeight() > Bi.getWidth()) {
        Ratio = ( new Integer(height)).doubleValue() / Bi.getHeight();
      } else {
        Ratio = ( new Integer(width)).doubleValue() / Bi.getWidth();
      }
      File savefile = new File(filePath + "_" + height + "_" + width
          + ".jpg" );
      Image Itemp = Bi.getScaledInstance(width, height,
          Image.SCALE_SMOOTH);
      AffineTransformOp op = new AffineTransformOp(AffineTransform
          .getScaleInstance(Ratio, Ratio), null );
      Itemp = op.filter(Bi, null );
 
       try {
        ImageIO.write((BufferedImage) Itemp, "jpeg" , savefile);
      } catch (Exception ex) {
 
      }
    }
  }
 
   public static void main(String[] args) {
     //    Test ts = new Test();
     try {
      Test.saveFixedBoundIcon( new File(
           "C:\\test.jpg" ), 200 , 200 );
    } catch (Exception e) {
       // 自动生成 catch 块
      e.printStackTrace();
    }
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值