程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 用Java來顯示圖片生成器

用Java來顯示圖片生成器

編輯:關於JAVA

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

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

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

3、可以設置輸出圖片的格式,如JPEG、GIF等;

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

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

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

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

二、下面列出相關的源代碼

1、抽象類AbstractImageCreator的源代碼

/**本代碼在 http://www.bt285.cn  http://www.5a520.cn 已使用了 */

public abstract class AbstractImageCreator {    
    private static Random rnd = new Random(new Date().getTime());   
        
    //圖片寬度   
    private int width = 200;   
        
    //圖片高度   
    private int height = 80;   
        
    //外框顏色   
    private Color rectColor;   
        
    //背景色   
    private Color bgColor;   
        
    //干擾線數目   
    private int lineNum = 0;   
        
    //圖片格式   
    private String formatName = "JPEG";   
        
    //字體顏色   
    private Color fontColor = new Color(0, 0, 0);   
        
    //字體名稱   
    private String fontName = "宋體";   
        
    //字體大小   
    private int fontSize = 15;   
        
   
    //##### 這裡省略成員變臉的get、set方法 #####   
   
   
    /**  
     * 畫干擾線   
     */   
    private void drawRandomLine(Graphics graph){   
        for(int i=0;i<lineNum;i++){   
            //線條的顏色   
            graph.setColor(getRandomColor(100, 155));   
                
            //線條兩端坐標值   
            int x1 = rnd.nextInt(width);   
            int y1 = rnd.nextInt(height);   
                
            int x2 = rnd.nextInt(width);   
            int y2 = rnd.nextInt(height);   
                
            //畫線條   
            graph.drawLine(x1, y1, x2, y2);    
        }    
    }    
        
    /**  
     * 隨機獲取顏色對象   
     */   
    private Color getRandomColor(int base, int range){   
        if((base + range) > 255) range = 255 - base;   
            
        int red = base + rnd.nextInt(range);   
        int green = base + rnd.nextInt(range);   
        int blue = base + rnd.nextInt(range);   
            
        return new Color(red, green, blue);   
    }    
            
                //該方法內應用了模板方法模式   
    public void drawImage(String text)throws IOException{   
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);   
            
        if(rectColor == null) rectColor = new Color(0, 0, 0);   
        if(bgColor == null) bgColor = new Color(240, 251, 200);   
            
        //獲取畫布   
        Graphics graph = image.getGraphics();    
            
        //畫長方形   
        graph.setColor(bgColor);    
        graph.fillRect(0, 0, width, height);   
            
        //外框   
        graph.setColor(rectColor);    
        graph.drawRect(0, 0, width-1, height-1);   
            
        //畫干擾線   
        drawRandomLine(graph);    
            
        //畫字符串   
        drawString(graph, text);    
            
        //執行   
        graph.dispose();    
            
        //輸出圖片結果   
        saveImage(image);    
    }    
        
    protected abstract void drawString(Graphics graph, String text);   
        
    protected abstract void saveImage(BufferedImage image)throws IOException;   
        
}

2、類DefaultImageCreator的源代碼

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

Java代碼

public class DefaultImageCreator extends AbstractImageCreator {    
    private String outputFilePath;   
        
    public String getOutputFilePath() {   
        return outputFilePath;   
    }    
   
    public void setOutputFilePath(String outputFilePath) {   
        this.outputFilePath = outputFilePath;   
    }    
        
    public DefaultImageCreator(){   
            
    }    
        
    public DefaultImageCreator(String outputFilePath){   
        this.outputFilePath = outputFilePath;   
    }    
   
    @Override  
    protected void drawString(Graphics graph, String text) {   
        graph.setColor(getFontColor());    
        Font font = new Font(getFontName(), Font.PLAIN, getFontSize());   
        graph.setFont(font);    
            
        FontMetrics fm = graph.getFontMetrics(font);    
        int fontHeight = fm.getHeight(); //字符的高度   
            
        int offsetLeft = 0;   
        int rowIndex = 1;   
        for(int i=0;i<text.length();i++){   
            char c = text.charAt(i);   
            int charWidth = fm.charWidth(c); //字符的寬度   
   
            //另起一行   
            if(Character.isISOControl(c) || offsetLeft >= (getWidth()-charWidth)){   
                rowIndex++;    
                offsetLeft = 0;   
            }    
                
            graph.drawString(String.valueOf(c), offsetLeft, rowIndex * fontHeight);    
            offsetLeft += charWidth;    
        }    
    }    
        
    @Override  
    protected void saveImage(BufferedImage image)throws IOException{   
        ImageIO.write(image, getFormatName(), new File(outputFilePath));   
    }    
   
}

3、類OutputStreamImageCreator的源代碼

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

Java代碼

public class OutputStreamImageCreator extends DefaultImageCreator {    
    private OutputStream out ;   
        
    public OutputStream getOut() {   
        return out;   
    }    
   
    public void setOut(OutputStream out) {   
        this.out = out;   
    }    
        
    public OutputStreamImageCreator(){   
            
    }    
        
    public OutputStreamImageCreator(OutputStream out){   
        this.out = 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) ImageIO.write(image, getFontName(), out);   
    }    
        
}

三、實例代碼

1、圖片存儲到文件

StringBuffer sb = new StringBuffer();

sb.append("中華人民共和國\n");   
sb.append("中華人民共和國\n");   
   
DefaultImageCreator creator = new DefaultImageCreator("c:\\img.jpeg");   
creator.setWidth(150);   
creator.setHeight(100);   
creator.setLineNum(60);   
creator.setFontSize(20);   
creator.drawImage(sb.toString());
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved