文字生成图片

package com.astral.kendama.yoga.order.util;


import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class TextToImage {
    public String Image( String contents) throws IOException {
        String text = contents;
        // 设置字体
        int fontSize = 20;
        text= text.replaceAll("<p>","")
                .replaceAll("<strong>","")
                .replaceAll("</strong>","")
                .replaceAll("&nbsp;","")
                .replaceAll("<br />","")
                .replaceAll("<h3>","")
                .replaceAll("</h3>","");

        String[] textArr =text.split("</p>");
        //@Value("${upload.path}")
       String filePath="/tmp/yoga-upload/" ;      // 要保存的图片路径
      // String filePath="D:/yoga-upload/" ;

        // 设置图片大小和背景色
        int width = 1200;
        int height = (fontSize+30)*textArr.length+1500;
        Color bgColor = new Color(255, 255, 255);
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = image.createGraphics();
        graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        graphics.setPaint(bgColor);
        graphics.fillRect(0, 0, width, height);


        Color fontColor = new Color(0, 0, 0);
        Font font = new Font("宋体", Font.BOLD, fontSize);
        graphics.setColor(fontColor);
        graphics.setFont(font);

        // 将文字绘制到图片中
        int x = 100;
        int y = 100;

//        graphics.drawString(textArr[0], x, y);
        for (int i = 0; i < textArr.length; i++) {
            //一行超过40个字符 做切分
            if(textArr[i].length()>40){
                int  m  = textArr[i].length()/40+1;
                for(int  n  = 0;n < m ;n++){
                    if(n*40<textArr[i].length()) {
                        if((n + 1) * 40 <=textArr[i].length()) {
                            String textArrSpilt = textArr[i].substring(n * 40, (n + 1) * 40 );
                            graphics.drawString(textArrSpilt, x, y);
                            y = y + 30;
                        }
                        else {
                            String textArrSpilt = textArr[i].substring(n * 40);
                            graphics.drawString(textArrSpilt, x, y);
                            y = y + 30;
                        }

                    }
                }
            }
            else {
                graphics.drawString(textArr[i], x, y);
                y=y+30;
            }

        }



        // 生成新的文件名并保存图片到本地文件
        String fileName = generateFileName();
        File file = new File(filePath + fileName);
        ImageIO.write(image, "png", file);

        System.out.println("Image saved to: " + filePath + fileName);

        return fileName;


    }

    private static String generateFileName() {
        Date now = new Date();
        now.getTime();
        return "image_" + now.getTime() + ".png";
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值