java根据图片和文字生成自定义图片

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ChartGraphics {
	private BufferedImage image;
	private int imageWidth = 300;  //图片的宽度
	private int imageHeight = 500; //图片的高度
	//生成图片文件
	@SuppressWarnings("restriction")
	public void createImage(String fileLocation) {
		BufferedOutputStream bos = null;
		if(image != null){
			try {
				FileOutputStream fos = new FileOutputStream(fileLocation);
				bos = new BufferedOutputStream(fos);
				
				JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
				encoder.encode(image);
				bos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				if(bos!=null){//关闭输出流
					try {
						bos.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}

	public void graphicsGeneration(String name, String id, String classname, String imgurl) {
		int H_title = 30;     //头部高度
		int H_mainPic = 200;  //轮播广告高度
		int H_tip = 60;  //上网提示框高度
		int H_btn = 25;  //按钮栏的高度
		int tip_2_top = (H_title+H_mainPic);
		int btns_2_top = tip_2_top+H_tip+20;
		int btn1_2_top = btns_2_top+10;
		int btn2_2_top = btn1_2_top+H_btn;
		int shops_2_top = btn2_2_top+H_btn+20;
		int W_btn = 280;  //按钮栏的宽度
		
		image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
		//设置图片的背景色
		Graphics2D main = image.createGraphics();
		main.setColor(Color.white);
		main.fillRect(0, 0, imageWidth, imageHeight);
		
		//***********************页面头部
		Graphics title = image.createGraphics();
		//设置区域颜色
		title.setColor(new Color(143, 0, 0));
		//填充区域并确定区域大小位置
		title.fillRect(0, 0, imageWidth, H_title);
		//设置字体颜色,先设置颜色,再填充内容
		title.setColor(Color.white);
		//设置字体
		Font titleFont = new Font("宋体", Font.BOLD, 14); 
		title.setFont(titleFont);
		title.drawString("my head", 100, (H_title)/2+5);

		//***********************插入中间广告图
		Graphics mainPic = image.getGraphics();
		BufferedImage bimg = null;
		try {
		   bimg = javax.imageio.ImageIO.read(new java.io.File(imgurl));
		} catch (Exception e) {}
	
		if(bimg!=null){
			mainPic.drawImage(bimg, 0, H_title, imageWidth, H_mainPic, null);
			mainPic.dispose();
		}
		//***********************设置下面的提示框
		
		Graphics2D tip = image.createGraphics();
		//设置区域颜色
		tip.setColor(new Color(255, 120, 89));
		//填充区域并确定区域大小位置
		tip.fillRect(0, tip_2_top, imageWidth, H_tip);
		//设置字体颜色,先设置颜色,再填充内容
		tip.setColor(Color.white);
		//设置字体
		Font tipFont = new Font("宋体", Font.PLAIN, 14); 
		tip.setFont(tipFont);
		tip.drawString("登录成功,本次认证时间1小时", 60, tip_2_top+(H_tip)/2-10);
		tip.drawString("正在返回商家主页", 100, tip_2_top+(H_tip)/2+10);
		
		
		
		//***********************设置下面的按钮块
		//设置字体颜色,先设置颜色,再填充内容
		tip.setColor(Color.black);
		tip.drawString("您可以选择的操作:", 20, btns_2_top);
		tip.drawString("下面的小图标:", 20, shops_2_top);
		//***********************按钮
		Font btnFont = new Font("宋体", Font.BOLD, 14); 
		Graphics2D btn1 = image.createGraphics();
		btn1.setColor(new Color(41,192 , 50));//#29C65A
		btn1.fillRect(10, btn1_2_top, W_btn, H_btn);
		btn1.setColor(Color.BLACK);
		btn1.drawRect(10, btn1_2_top, W_btn, H_btn);
		//btn1 文本
		btn1.setColor(Color.white);
		btn1.setFont(btnFont);
		btn1.drawString("单击我啊", 120, btn1_2_top+(H_btn/2)+5);
		
		Graphics2D btn2 = image.createGraphics();
		btn2.setColor(new Color(141,120 , 22));//#29C65A
		btn2.fillRect(10, btn2_2_top, W_btn, H_btn);
		btn2.setColor(Color.BLACK);
		btn2.drawRect(10, btn2_2_top, W_btn, H_btn);
		//btn2文本
		btn2.setColor(Color.white);
		btn2.setFont(btnFont);
		btn2.drawString("单击我啊", 120, btn2_2_top+(H_btn/2)+5);
	
		createImage("c:\hehe.jpg");
		
	}

	public static void main(String[] args) {
		ChartGraphics cg = new ChartGraphics();
		try {
			cg.graphicsGeneration("ewew", "1", "12", "E:\work_folder\picture\big_pic\1.jpg");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  

原文地址:https://www.cnblogs.com/qianna-daisy/p/4572221.html