在Java / Clojure中生成包含使用OpenType功能的文本的图像

时间:2015-11-15 21:46:32

标签: java clojure opentype

我正在尝试使用Java / Clojure生成一个图像,主要由使用带有opentype功能的自定义字体的文本组成。我试图在Java中使用当前的OTF Font支持,甚至升级到oracle Java 8并将TextAttribute Ligatures设置为On但没有帮助。任何人都可以就可能的事情提出建议。

注意我需要能够确定图像的字体大小,行高和宽度,因此我不确定在这种情况下是否可以使用TEX。

2 个答案:

答案 0 :(得分:2)

我相信Java方面的答案已在SO question中得到解答。但是我对Clojure进行了翻译,因为java interop有点棘手。请注意,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)))  

答案 1 :(得分:0)

我知道有关OTF的知识,但对于快速和肮脏的解决方案如何使用phantomjs生成PNG?如果您的项目可以将其作为依赖项,那么您可以在以后使用本机解决方案。

我也发现了这一点,也许那里有一些响铃的东西:https://github.com/jfacorro/clojure-lab

编辑:您也可以使用处理:https://processing.org/reference/createFont_.html它是一个Java库,因此您可以在项目中使用它,或者如果创建图像是您的应用程序的主要目的,请直接使用Processing - 一个很好的环境快速创建使用图像的原型/应用程序。