吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2018|回复: 0
收起左侧

[Java 转载] 公式转透明图片以及base64

[复制链接]
1664593601 发表于 2019-2-23 15:16
写了个小Demo,将公式字符串例如“$$R_x=N_xP_xL_x$$”转为公式,公式见图“公式样式”。
用到的jar包jlatexmath主要用来将字符串转为公式,Graphics2D主要就是用来绘制图形。
直接上代码。
[Java] 纯文本查看 复制代码
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JLabel;
import org.scilab.forge.jlatexmath.TeXConstants;
import org.scilab.forge.jlatexmath.TeXFormula;
import org.scilab.forge.jlatexmath.TeXIcon;
import sun.misc.BASE64Encoder;

public class Latex2Png {

	// latex 转 imgbase64
	public static boolean latex2Png(String latex, String filePath) {
		String suffix = filePath.substring(filePath.lastIndexOf(".") + 1);
		BufferedImage bufferedImage = latex2BuImage(latex);
		if (null == bufferedImage) {
			return false;
		}
		try {
			File file = new File(filePath);
			File pFile = file.getParentFile();
			if (!pFile.exists()) {
				pFile.mkdirs();
			}
			ImageIO.write(bufferedImage, suffix, file);
			return true;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
	}

	// latex 转 imgbase64
	public static String latex2Png(String latex) {
		BufferedImage bufferedImage = latex2BuImage(latex);
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		try {
			ImageIO.write(bufferedImage, "png", outputStream);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
		byte[] buffer = outputStream.toByteArray();
		BASE64Encoder encoder = new BASE64Encoder();
		return ("data:image/png;base64," + encoder.encode(buffer));
	}

	private static BufferedImage latex2BuImage(String drawStr) {
		try {
			TeXFormula formula = new TeXFormula(drawStr);
			TeXIcon icon = formula
					.createTeXIcon(TeXConstants.STYLE_DISPLAY, 40);
			icon.setInsets(new Insets(5, 5, 5, 5));

			int width = icon.getIconWidth();
			int height = icon.getIconHeight();

			JLabel jl = new JLabel();
			jl.setForeground(new Color(0, 0, 0));

			BufferedImage buffImg = new BufferedImage(width, height,
					BufferedImage.TYPE_INT_RGB);
			Graphics2D gd = buffImg.createGraphics();
			buffImg = gd.getDeviceConfiguration().createCompatibleImage(width,
					height, Transparency.TRANSLUCENT);
			gd = buffImg.createGraphics();
			gd.setColor(Color.white);
			icon.paintIcon(jl, gd, 0, 0);

			return buffImg;
		} catch (Exception e) {
			System.err.println("公式解析有误:\n" + drawStr);
			e.printStackTrace();
			return null;
		}
	}

}


代码全在这里了,也不用附件了

公式样式

公式样式

免费评分

参与人数 1吾爱币 +5 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-15 14:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表