根据姓名生成圆形图片

package com.hh.javaapp.app1;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.imageio.ImageIO;


/**
 * @Title: ImgGenerator.java
 * @Package com.hh.javaapp.app1
 * @project javaapp
 * @Description: 将用户的姓名生成图片
 * @author lixunhui@qq.com
 * @date 2013年10月14日 下午2:31:13
 * @version V1.0
 */

public class CreateNamePicture {
	/**
	 * @throws IOException 
	 * @throws  
	 *
	 **/
	public static void main(String[] args) throws  IOException {
		String fileName="D:/name.txt";
		List<String> nameList = readFileByLine(fileName);
		for (int i = 0; i < nameList.size(); i++) {
		        generateImg(nameList.get(i));
		  }

	}
	
	/**
	 * 
	  * readFileByLine(将文件中的文字一行一行读取出来并存放在List中返回)
	  * TODO(这里描述这个方法适用条件 – 不允许是图片等特殊文件)
	  * @Title: readFileByLine
	  * @Description: TODO
	  * @param @param filename
	  * @param @return
	  * @param @throws IOException
	  * @param @throws FileNotFoundException    设定文件
	  * @return List<String>    返回类型
	  * @throws
	 */
	public static List<String> readFileByLine(String filename) throws IOException, FileNotFoundException{
		List<String> nameList=new ArrayList<String>();
		File file=new File(filename);
		InputStreamReader isr=new InputStreamReader(new FileInputStream(file),"UTF-8");
		BufferedReader reader=new BufferedReader(isr);
		String tmp;
		while((tmp=reader.readLine())!=null){
			nameList.add(tmp);
		}
		reader.close();
		return nameList;
	}
	/**
	  * @Title: generateImg(生成图片)
	  * @Description: TODO
	  * @param @param name
	  * @param @throws IOException    设定文件
	  * @return void    返回类型
	  * @throws
	 */
	public static void generateImg(String name) throws IOException{
		int width=100;
		int height=100;
		String first=null,second=null,third=null,fourth=null;
		
		first=name.substring(0, 1);
		second=name.substring(1,2);
		if(name.length()==2){
			third="印";
			fourth=null;
		}else if(name.length()==3){
			third=name.substring(2, 3);
			fourth="印";
		}else{
			third=name.substring(2,3);
			fourth=name.substring(3,4);
		}
		
		String filename="D:/name/"+name+".jpg";
		System.out.println(filename);
		File file=new File(filename);
		Font font=new Font("黑体",Font.PLAIN,30);
		
		BufferedImage bi =new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		
		Graphics2D g2=(Graphics2D) bi.getGraphics();
		g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
		
		g2.setBackground(getRandomColor());
		
		g2.clearRect(0, 0, width, height);
		
		g2.setFont(font);
		g2.setPaint(Color.WHITE);
		
		g2.drawString(first, 55, 40);
        g2.drawString(second, 55, 80);
        g2.drawString(third, 15, 40);
		
		
		if(fourth==null){
			drawStar(g2);
		}else{
			g2.drawString(fourth, 15, 80);
		}
		ImageIO.write(bi,"jpg", file);
	}
	/**
	  * drawStar(如果名字为三个字,调用这个方法画五角星)
	  * @Title: drawStar
	  * @Description: TODO
	  * @param @param g2    设定文件
	  * @return void    返回类型
	  * @throws
	 */
	private static void drawStar(Graphics2D g2) {
		//定义外切圆和内切圆的半径
		int R=16;
		int r=(int)(R*Math.sin(Math.PI/10)/Math.sin(3*Math.PI/10));
		//定义两个数组,分别存放10个顶点的X,Y坐标
		int [] x=new int[10];
		int [] y=new int[10];
		for(int i=0;i<10;i++){
			if(i%2==0){
				x[i]=30+(int)(R * Math.cos(Math.PI / 10 + (i - 1) * Math.PI / 5));
				y[i] = 70 + (int) (R * Math.sin(Math.PI / 10 + (i - 1) * Math.PI / 5));
			}else{
				x[i] = 30 + (int) (r * Math.cos(Math.PI / 10 + (i - 1) * Math.PI / 5));
				y[i] = 70 + (int) (r * Math.sin(Math.PI / 10 + (i - 1) * Math.PI / 5));
			}
		}
		 g2.setPaint(Color.white);
		// 调用fillPolygon方法绘制
		 g2.fillPolygon(x, y, 10);
	}
	/**
	  * getRandomColor(随机产生颜色)
	  * @Title: getRandomColor
	  * @Description: TODO
	  * @param @return    设定文件
	  * @return Color    返回类型
	  * @throws
	 */
	private static Color getRandomColor() {
		Random random=new Random();
		return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
	}
}
以上代码会将存储在name.txt中的姓名名单生成对应的图片,调用下面的工具类会将图片做圆角处理或者缩小处理
package com.hh.javaapp.app1;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;


/**
  *	 改变图片的工具类
  * @ClassName: ChangeImage
  * @Description: TODO
  * @author lixunhui@qq.com
  * @date 2013年10月14日 下午3:34:56
  *
 */
public class ChangeImageUtil {
	
	/**
	  * makeRoundedCorner(图片做圆角处理)
	  * @Title: makeRoundedCorner
	  * @Description: TODO
	  * @param @param image
	  * @param @param cornerRadius
	  * @param @return    设定文件
	  * @return BufferedImage    返回类型
	  * @throws
	 */
	
    public static BufferedImage makeRoundedCorner(BufferedImage image,
            int cornerRadius) {
        int w = image.getWidth();
        int h = image.getHeight();
        BufferedImage output = new BufferedImage(w, h,  BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2 = output.createGraphics();
        g2.setComposite(AlphaComposite.Src);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setColor(Color.WHITE);
        g2.fill(new RoundRectangle2D.Float(0, 0, w, h, cornerRadius, cornerRadius));
        g2.setComposite(AlphaComposite.SrcAtop);
        g2.drawImage(image, 0, 0, null);
        g2.dispose();
        return output;
    }
    /**
      * createResizedCopy(图片缩放处理)
      * @Title: createResizedCopy
      * @Description: TODO
      * @param @param originalImage
      * @param @param scaledWidth
      * @param @param scaledHeight
      * @param @param preserveAlpha
      * @param @return    设定文件
      * @return BufferedImage    返回类型
      * @throws
     */
    public static BufferedImage createResizedCopy(Image originalImage, int scaledWidth,
            int scaledHeight, boolean preserveAlpha) {
        int imageType = preserveAlpha ? BufferedImage.TYPE_INT_RGB
                : BufferedImage.TYPE_INT_ARGB;
        BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight,
                imageType);
        Graphics2D g = scaledBI.createGraphics();
        if (preserveAlpha) {
            g.setComposite(AlphaComposite.Src);
        }
        g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null);
        g.dispose();
        return scaledBI;
    }

    public static void main(String[] args) throws IOException {
        BufferedImage icon = ImageIO.read(new File("D:/name/name1.jpg"));
        BufferedImage rounded = makeRoundedCorner(icon, 99);
        ImageIO.write(rounded, "png", new File("D:/name/mm_name1.png"));
        
        BufferedImage pic = ImageIO.read(new File("D:/name/name2.jpg"));
        BufferedImage resized = createResizedCopy(pic, pic.getWidth()/2,pic.getHeight()/2, true);
        ImageIO.write(resized, "jpg", new File("D:/name/name2_small.jpg"));
    }

}

生成的效果如下图:

转载于:https://my.oschina.net/huiger/blog/168691

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值