Graphics2D.drawString () с эмодзи не работает - PullRequest
0 голосов
/ 21 октября 2019
  1. Это не работает, если я упаковал код как .jar вместо того, чтобы просто использовать classpath (как если бы я нажал "Play" в IDE)
  2. Когда я использую IDE, основнойСмайлики типа ❤️ можно нарисовать с помощью g2.drawString (с использованием шрифта Apple Color Emoji), однако модификаторы тона кожи (например, ??) и группы смайликов, такие как (?‍?‍?), отображаются неправильно.

Что мне делать?

PS Я не зарегистрировал шрифт через GraphicsEnvironment, как он работал, когда я собирал ("играю") в IDE. Мне не ясно, как получить шрифт AppleColorEmoji и зарегистрировать его, и я сомневаюсь, что это может решить проблемы.

Я также попытался вставить "??" непосредственно в код, и он "разлагается" как2 блока (? с тофу тона кожи) в коде уже. Кроме того, я пробовал эквивалентную строку из 4 юникодов, и она не работала.

Редактировать:

В соответствии с просьбой, приведен пример исходного кода (на языке Kotlin):

import java.io.*
import javax.imageio.ImageIO
import java.awt.*

class Main {
    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            val image = BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB)
            val g2 = image.graphics as Graphics2D
            g2.font = Font("AppleColorEmoji", Font.PLAIN, 30)
            g2.color = Color.BLACK
            // trying to get ?‍?‍?‍?, got ????rendered in both cases
            // g2.drawString("\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66", 50, 50)
            // g2.drawString("\ud83d\udc69\ud83d\udc69\ud83d\udc67\ud83d\udc66", 50, 50)

            g2.drawString("❤️", 50, 50)
            g2.drawString("??", 150, 150)
            g2.drawString("?‍?‍?", 250, 250)
            ImageIO.write(image, "png", File("test.png"))
        }
    }
}

Мы можем видеть, что вместо 3-х эмодзи (❤️, ??, ?‍?‍?) большой палец и семья воспроизводятся, так как окружение не рассматривается):

Sample Result

...