水印生成图片(2)

水印生成图片(2)
package text;
/**
 * @author 让痛苦痛苦
 * @param 说明:ImageLabeler类用来实现水印效果,这个类的部分代码和方法ImageDisplay applet想同。通过调用
 * 组件的get/setProperty指令,很多变量名都可以与applet完全相同,这样一来,这个类不但可以用于Imageloader
 * 其他调用过程或JavaBean也可以实现对水印效果的控制。和applet加载图片文件的方法一样,ImageLabeler也使用了
 * MediaTracker类
 * 出来设置参数,通常还要用到如下两个成员函数:
 * --publicvoidWatermarkImage(String inImgFilename,String outImageFilename),这个函数可以独立使用,
 * inImgFilename指定要加载的图片文件,outImageFilename是修改后的图片保存时所用的文件名。
 * --public SevletOutputStream Pulling(ServletOutputStream SOSout,String imgFile),用于指定要调用的Servet
 * 的名称。这个函数接受调用者提供的ServletOutputStream,参数imgFile则是被处理图片的完整路径。
 */
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.servlet.ServletOutputStream;
import javax.swing.JComboBox;
import javax.swing.JComponent;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGDecodeParam;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ImageLabeler extends JComponent {
 private ServletOutputStream out;
 private String strDisplayOverlay="Copyright 2008 Todd Cook";
 private int iOverlayXPosition =20;
 private int iOverlayYPosition =20;
 private int iFontSize=14;
 
 public String getDisplayOverlay()
 {
  return strDisplayOverlay;
  
 }
 public void setDisplayOverlay(String NewDisplayOverlay)
 {
  if(NewDisplayOverlay!=null)
  {
   strDisplayOverlay=NewDisplayOverlay;
  }
 }
 public int getOverlayXPosition()
 {
  return iOverlayXPosition;
 }
 public void setOverlayXPosition(int NewOverlayXPosition)
 {
  iOverlayXPosition=NewOverlayXPosition;
 }
 public int getOverlayYPosition()
 {
  return iOverlayYPosition;
 }
 public void setOverlayYPosition(int NewOverlayYPosition)
 {
  iOverlayYPosition=NewOverlayYPosition;
 }
 public int getFontSize()
 {
  return iFontSize;
 }
 public void setFontSize(int NewFontSize)
 {
  iFontSize=NewFontSize;
 }
 public ServletOutputStream Pulling(ServletOutputStream SOSout,String imgFile)
 {
  out=SOSout;
  BufferedImage bi=null;   //LoadnModifyBufferedImage(imgFile);
  try {
   JPEGImageEncoder jpEnc=JPEGCodec.createJPEGEncoder(out);
   jpEnc.encode(bi);
  } catch (Exception e) {
   e.printStackTrace();
   // TODO: handle exception
  }
  return out;
 }
 public void WatermarkImage(String inImgFilename,String outImgFilename)
 {
  try {
   FileOutputStream fos=new FileOutputStream(new File(outImgFilename));
   BufferedImage bi=null;  //LoadnModifyBufferedImage(inImgFilename);
   JPEGEncodeParam jpEncParam=JPEGCodec.getDefaultJPEGEncodeParam(bi);
   jpEncParam.setQuality(1, false);
   JPEGImageEncoder jpEnc=JPEGCodec.createJPEGEncoder(fos,jpEncParam);
   jpEnc.encode(bi);
   fos.close();
   
   
  } catch (IOException ioe) {
   ioe.printStackTrace();
   // TODO: handle exception
  }
  
 }
 private BufferedImage LoadnModifyBufferedImage(String imgFile)
 {
  BufferedImage bi;
  bi=new BufferedImage(1,1,BufferedImage.TYPE_INT_RGB);
  try {
   MediaTracker mt=new MediaTracker(this);
   Image inImg=Toolkit.getDefaultToolkit().getImage(imgFile);
   mt.addImage(inImg, 1);
   try {
    mt.waitForAll();
    if(mt.isErrorAny())
    {
     System.out.println("Error in loading");
    }
   } catch (InterruptedException e) {
    e.printStackTrace();
    // TODO: handle exception
   }
   int imgWidth=inImg.getWidth(this);
   int imgHeight=inImg.getHeight(this);
   bi=new BufferedImage(imgWidth,imgHeight,BufferedImage.TYPE_INT_RGB);
   Graphics2D g2d=bi.createGraphics();
   g2d.drawImage(inImg, 0, 0, null);
   Color cOverlayColor=Color.WHITE;
   g2d.setFont(new Font("Arial",Font.BOLD,iFontSize));
   g2d.drawString(strDisplayOverlay, iOverlayXPosition, iOverlayYPosition);
   
  } catch (Exception e) {
   e.printStackTrace();
   // TODO: handle exception
  }
  return bi;
  
 }
 public static void main(String[] args)
 {
  System.out.println("Can be run stand_alone,"+"just invoke,ush get/set values,call.....");
  System.out.println("例如:"+"C://11.jpeg"+"C://12.jpeg");
  ImageLabeler il=new ImageLabeler();
  if(args.length<2)
  {
   il.WatermarkImage("C://11.jpeg","C://12.jpeg");
   
  }
  else
  {
   il.WatermarkImage(args[0], args[1]);
  }
 }
 
 /**
  * @author 让痛苦痛苦
  * Imagelabeler与ImageDisplay applet之间有一点细小的差别,前者将图片文件加载到BUfferedImage中。
  * JPEGEncoderBufferedImage的好处体现在可以更方便地生成java2D图形对象(与BufferedImage相关联)以及
  * 更方便地在其中绘图/
  */
 
 
 
}


/**
 * @author 让痛苦痛苦
 * 这是在html页面调用的代码
 *
 */
//精华部分

<form action="/servlet/text.ImageLoader" method="get">
<select name="image">
<option value="biedandfish">Bird gets the fish</option>
<option value="sketchbook">Skechook</option>
</select>
<input tyoe="submit" value="submit">
</form>
< a href="htmlEmbeddedImages.html">here</a>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值