我正试图使用Java/Clojure生成一个图像,该图像主要由使用具有opentype功能的自定义字体的文本组成。我曾尝试在Java中使用当前的OTF字体支持,甚至升级到了oracleJava8,并将TextAttributeLiatures设置为On,但无济于事。有人能就可能的事情提供建议吗。
注意,我需要能够确定字体大小,行高和图像宽度,所以我不确定在这种情况下是否可以使用TEX。
我相信Java方面的答案已经在这个SO问题中得到了回答。但我翻译了Clojure,因为java互操作有点棘手。请注意,ImageIO/write使用BufferedImage实例,而不是Graphics2D,在整个程序中,image
使用Graphics2D实例进行突变。
(ns so-33725486.core
(:import [java.awt Graphics2D Color Font]
[java.awt.image BufferedImage]
[javax.imageio ImageIO]
[java.io File]))
(defn str->img [string filename]
(let [file (File. (str "./" filename ".png"))
width 250
height 100
image (BufferedImage. width height BufferedImage/TYPE_INT_ARGB)
graphics (.createGraphics image)
font-size 30
font (Font. "TimesRoman" Font/BOLD font-size)]
(.setColor graphics Color/BLACK)
(.setFont graphics font)
(.drawString graphics string 10 25)
(ImageIO/write image "png" file)))
我对OTF一无所知,但为了快速&肮脏的解决方案使用phantomjs生成PNG怎么样?如果您的项目可以将其作为依赖项,那么您可以在以后开发本机解决方案。
我还发现了这个,也许有什么东西给你敲响了警钟:https://github.com/jfacorro/clojure-lab
编辑:您也可以使用处理:https://processing.org/reference/createFont_.html它是一个Java库,因此您可以在项目中使用它,或者如果创建图像是应用程序的主要目的,则直接使用Processing——这是一个快速创建使用图像的原型/应用程序的好环境。