利用JAVA的awt组件制作生成红底白字的图片,文字居中适应高度

作者: admin 分类: JAVA 发布时间: 2019-09-09 22:13  阅读: 140 views

背景说明

近期程序猿得根据需求要使用java代码生成处理一堆图片,图片是以文章的标题来生成的。字数的长度大小要跟着整体比例进行基本的自适应处理。几百张吧,一次性生成好。

处理过程

JAVA肯定是用awt组件了,也不用依赖其他的三方jar了,越快越好。计算下所有的标题字数长度,预设图片的高度和宽度,针对能出现的最大、最小行数配合字体的像素做下基本的运算。开始编码

测试代码如下

package com.chl.base.tools;

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

import javax.imageio.ImageIO;

/**
 * 图片处理
 * 红底白字
 * @author chenhailong
 *
 */
public class ImageUtils {

    public static int w  = 900;
    public static int h = 500;
    public static int f = 120; //默认字体大小 -像素
    public static int n = 9;   //默认每行6个字
    public static String pub = "中华人民共和国";


    public static void createPictureInner(String title) {
        String szm = PinYinUtils.getFirstSpell(title); //取首字母作为图片的名称


        //得到图片缓冲区 (宽度、高度,图片类型)
        BufferedImage bi = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
        //得到它的绘制环境(这张图片的笔) 
        Graphics2D g2 = (Graphics2D) bi.getGraphics();
        g2.fillRect(0,0,w,h);//填充一个矩形 左上角坐标(0,0),宽70,高150;填充整张图片 
        g2.setColor(Color.red); //填充颜色
        g2.fillRect(0,0,w,h);//填充整张图片(其实就是设置背景颜色)
        g2.setColor(Color.black);//边框
        g2.drawRect(0,0,w-1,h-1); //画边框
        g2.setFont(new Font("宋体",Font.BOLD,f)); //设置字体:字体、字号、大小 
        g2.setColor(Color.white);//设置背景颜色

        //截取公有部分
        String right = title.replace(pub, "");
        int temp_h = 220;
        if(right.length() < 8){
            g2.drawString(pub,35,temp_h); //向图片上写字符串 
            g2.drawString(right,(w - right.length() * f)/2 , temp_h + f); //同等大小
        }else {
            int f_f = 96;
            int lines = right.length() / n + 1; //剩余字符的行数
            int last = right.length() -  (lines - 1) * n; //最后一行的字数

            temp_h = temp_h - (lines-1) * 40; //固定字体根据字数长度上移
            g2.drawString(pub,35,temp_h); //向图片上写字符串 
            g2.setFont(new Font("宋体",Font.BOLD,f_f)); //设置字体:字体、字号、大小 
            for(int i = 1;i<= lines; i++) {
                if(i == lines) {
                    g2.drawString(right.substring((i-1)*n, right.length()),(w - last * f_f)/2,temp_h+f_f * i); 
                }else {
                    g2.drawString(right.substring((i-1)*n, i * n),18,temp_h+f_f * i);  

                }
            }
        }


        try {
            ImageIO.write(bi,"JPEG",new FileOutputStream("/Users/chenhailong/Desktop/"+szm+".jpg"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }//保存图片 JPEG表示保存格式
    }


    public static void main(String[] args) {

        createPictureInner("中华人民共和国全国生活垃圾分类引领区努力打造无废美丽的城市");
        createPictureInner("中华人民共和国垃圾分类");
        createPictureInner("中华人民共和国居民个人垃圾分类不规范的处罚");


    }
}


效果如下

两行

三行

四行


   原创文章,转载请标明本文链接: 利用JAVA的awt组件制作生成红底白字的图片,文字居中适应高度

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

一条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读