功能:直接在一张已有的图片上写字,可指定文字颜色。
           如果背景图片是空,生成一张白图片,根据文本信息,来决定图片的长度和宽度。

package pictures;

 import java.awt.Color;
 import java.awt.Font;
 import java.awt.Graphics;
 import java.awt.image.BufferedImage;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;

 import javax.imageio.ImageIO;
public class Draw {
      private static Font mFont = new Font("宋体",Font.PLAIN,20); 

     public static void main(String[] args) {

         File f1 = new File("C:\\Documents and Settings\\xugang\\桌面\\t.txt");
         File f2 = new File("C:\\Documents and Settings\\xugang\\桌面\\testPictrue.JPEG");
         File f3 = new File("C:\\Documents and Settings\\xugang\\桌面\\1.jpg");
         draw2(f1,f2,f3,true);
         
     }
     
     //直接在一张已有的图片上写字,可指定文字颜色。如果背景图片参数为空或者"",则写张白图
     public static void draw2( File content , File outPictrue , File background , boolean b ){
          FileReader f = null ;
             try {
                 f = new FileReader(content);
             } catch (FileNotFoundException e1) {
                 e1.printStackTrace();
             }
                 BufferedReader br = new BufferedReader(f);
                 String line = "";

                 int lineNum = 0 ;    //一共有多少行
                 List<String> list = new ArrayList<String>();
                 try {
                     while( (line = br.readLine()) != null){
                         System.out.println(line);
                         list.add(line);
                         ++lineNum;
                     }
                 } catch (IOException e1) {
                     e1.printStackTrace();
                 }
                 
                 int[] iArray = new int[list.size()];
                 int length = list.size();
                 for(int k = 0 ; k < length ; k++){
                     iArray[k] = format1(list.get(k));
                 }
                 Arrays.sort(iArray);
                 int lineLength = iArray[length-1];
                 System.out.println("文本中最长的一行的长度是:"+lineLength);
                 System.out.println("一共的行数是:"+lineNum);
                 BufferedImage image = null;
                 if( background.equals("") || background == null){
                     double h = 256/16;
                     double w = 85/10;
                     int width=(int) (w*lineLength)+ 40 , height=(int) (h*lineNum);
                     image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
                 }else{
                     try {
                         image = ImageIO.read(background);
                     } catch (IOException e1) {
                         e1.printStackTrace();
                     }
                 }
                 Graphics g = image.getGraphics();
 //                g.setColor(getRandColor(200,250));
 //                g.fillRect(1, 1, width-1, height-1);
                 if( b == false){
                 g.setColor(new Color(102,102,102));  //设字体为黑色,否则就是白色
                 }
 //                g.drawRect(0, 0, width-1, height-1);
                 g.setFont(mFont);
                 int k = 0;
                 Iterator<String> it = list.iterator();
                 while(it.hasNext()){
                     g.drawString(it.next(), 30, 15 + 20*k);
                     ++k;
                 }
                 try {
                     ImageIO.write(image, "JPEG", outPictrue);
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
     }
     
     //返回占位符的长度。
      public static int format1( String s){
             int length = 0 ;
             for(int t = 0; t < s.length() ; t++){
                 if( s.charAt(t)> 255){
                     length = length + 2;
                 }else{
                     length = length + 1 ;
                 }
             }
             System.out.println(length);
             return length;
      }
      //生成一张白图片,根据文本信息,来决定图片的长度和宽度。
      //缺点:字体不同,字体样式不同,都会影响整个图片。
      public static void draw1(){
          FileReader f = null ;
         try {
             f = new FileReader("C:\\Documents and Settings\\xugang\\桌面\\t.txt");
         } catch (FileNotFoundException e1) {
             e1.printStackTrace();
         }
             BufferedReader br = new BufferedReader(f);
             String line = "";

             int lineNum = 0 ;    //一共有多少行
             List<String> list = new ArrayList<String>();
             try {
                 while( (line = br.readLine()) != null){
                     System.out.println(line);
                     list.add(line);
                     ++lineNum;
                 }
             } catch (IOException e1) {
                 e1.printStackTrace();
             }
             
             int[] iArray = new int[list.size()];
             int length = list.size();
             for(int k = 0 ; k < length ; k++){
                 iArray[k] = format1(list.get(k));
             }
             Arrays.sort(iArray);
             int lineLength = iArray[length-1];
             System.out.println("文本中最长的一行的长度是:"+lineLength);
             System.out.println("一共的行数是:"+lineNum);
             
             double h = 256/16;
             double w = 85/10;
             int width=(int) (w*lineLength)+ 40 , height=(int) (h*lineNum);
             BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
             Graphics g = image.getGraphics();
 //            g.setColor(getRandColor(200,250));
             g.fillRect(1, 1, width-1, height-1);
             g.setColor(new Color(102,102,102));
             g.drawRect(0, 0, width-1, height-1);
             g.setFont(mFont);
             int k = 0;
             Iterator<String> it = list.iterator();
             while(it.hasNext()){
                 g.drawString(it.next(), 30, 15+15*k);
                 ++k;
             }
             try {
                 ImageIO.write(image, "JPEG", new File("C:\\Documents and Settings\\xugang\\桌面\\testPictrue.JPEG"));
             } catch (IOException e) {
                 e.printStackTrace();
             }
      }
 }