熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

用Java來顯示圖片生成器

2013-11-23 19:18:31  來源: Java核心技術 

  一本圖片生成器具有以下功能特性

  可以設置圖片的寬度高度外框顏色背景色

  可以設置圖片字體的大小名稱顏色

  可以設置輸出圖片的格式如JPEGGIF等

  可以將圖片存儲到一個文件或者存儲到一個輸出流

  可以為圖片增加若干條干擾線(在生成隨機碼圖片時可用此特性)

  打印在圖片上的文字支持自動換行

  另外本圖片生成器還用到了模板方法模式

  二下面列出相關的源代碼

  抽象類AbstractImageCreator的源代碼

  /**本代碼在    已使用了 */

  public abstract class AbstractImageCreator {

  private static Random rnd = new Random(new Date()getTime());

  //圖片寬度

  private int width = ;

  //圖片高度

  private int height = ;

  //外框顏色

  private Color rectColor;

  //背景色

  private Color bgColor;

  //干擾線數目

  private int lineNum = ;

  //圖片格式

  private String formatName = JPEG;

  //字體顏色

  private Color fontColor = new Color(  );

  //字體名稱

  private String fontName = 宋體;

  //字體大小

  private int fontSize = ;

  //##### 這裡省略成員變臉的getset方法 #####

  /**

  * 畫干擾線

  */

  private void drawRandomLine(Graphics graph){

  for(int i=;i<lineNum;i++){

  //線條的顏色

  graphsetColor(getRandomColor( ));

  //線條兩端坐標值

  int x = rndnextInt(width);

  int y = rndnextInt(height);

  int x = rndnextInt(width);

  int y = rndnextInt(height);

  //畫線條

  graphdrawLine(x y x y);

  }

  }

  /**

  * 隨機獲取顏色對象

  */

  private Color getRandomColor(int base int range){

  if((base + range) > ) range =   base;

  int red = base + rndnextInt(range);

  int green = base + rndnextInt(range);

  int blue = base + rndnextInt(range);

  return new Color(red green blue);

  }

  //該方法內應用了模板方法模式

  public void drawImage(String text)throws IOException{

  BufferedImage image = new BufferedImage(width height BufferedImageTYPE_INT_RGB);

  if(rectColor == null) rectColor = new Color(  );

  if(bgColor == null) bgColor = new Color(  );

  //獲取畫布

  Graphics graph = imagegetGraphics();

  //畫長方形

  graphsetColor(bgColor);

  graphfillRect(  width height);

  //外框

  graphsetColor(rectColor);

  graphdrawRect(  width height);

  //畫干擾線

  drawRandomLine(graph);

  //畫字符串

  drawString(graph text);

  //執行

  graphdispose();

  //輸出圖片結果

  saveImage(image);

  }

  protected abstract void drawString(Graphics graph String text);

  protected abstract void saveImage(BufferedImage image)throws IOException;

  }

  類DefaultImageCreator的源代碼

  該類將生成的圖片存儲到一個文件中需要設置outputFilePath成員變量值該成員變量值表示圖片的存儲全路徑

  Java代碼

  public class DefaultImageCreator extends AbstractImageCreator {

  private String outputFilePath;

  public String getOutputFilePath() {

  return outputFilePath;

  }

  public void setOutputFilePath(String outputFilePath) {

  thisoutputFilePath = outputFilePath;

  }

  public DefaultImageCreator(){

  }

  public DefaultImageCreator(String outputFilePath){

  thisoutputFilePath = outputFilePath;

  }

  @Override

  protected void drawString(Graphics graph String text) {

  graphsetColor(getFontColor());

  Font font = new Font(getFontName() FontPLAIN getFontSize());

  graphsetFont(font);

  FontMetrics fm = graphgetFontMetrics(font);

  int fontHeight = fmgetHeight(); //字符的高度

  int offsetLeft = ;

  int rowIndex = ;

  for(int i=;i<textlength();i++){

  char c = textcharAt(i);

  int charWidth = fmcharWidth(c); //字符的寬度

  //另起一行

  if(CharacterisISOControl(c) || offsetLeft >= (getWidth()charWidth)){

  rowIndex++;

  offsetLeft = ;

  }

  graphdrawString(StringvalueOf(c) offsetLeft rowIndex * fontHeight);

  offsetLeft += charWidth;

  }

  }

  @Override

  protected void saveImage(BufferedImage image)throws IOException{

  ImageIOwrite(image getFormatName() new File(outputFilePath));

  }

  }

  類OutputStreamImageCreator的源代碼

  該類將生成的圖片存儲到一個輸出流中需要設置out成員變量值

  Java代碼

  public class OutputStreamImageCreator extends DefaultImageCreator {

  private OutputStream out ;

  public OutputStream getOut() {

  return out;

  }

  public void setOut(OutputStream out) {

  thisout = out;

  }

  public OutputStreamImageCreator(){

  }

  public OutputStreamImageCreator(OutputStream out){

  thisout = out;

  }

  @Override

  public String getOutputFilePath() {

  return null;

  }

  @Override

  public void setOutputFilePath(String outputFilePath) {

  outputFilePath = null;

  }

  @Override

  protected void saveImage(BufferedImage image) throws IOException {

  if(out!=null) ImageIOwrite(image getFontName() out);

  }

  }

  三實例代碼

  圖片存儲到文件

  StringBuffer sb = new StringBuffer();

  sbappend(中華人民共和國\n);

  sbappend(中華人民共和國\n);

  DefaultImageCreator creator = new DefaultImageCreator(c:\\imgjpeg);

  creatorsetWidth();

  creatorsetHeight();

  creatorsetLineNum();

  creatorsetFontSize();

  creatordrawImage(sbtoString());


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26622.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.