- Это не работает, если я упаковал код как
.jar
вместо того, чтобы просто использовать classpath (как если бы я нажал "Play" в IDE) - Когда я использую 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-х эмодзи (❤️, ??, ???) большой палец и семья воспроизводятся, так как окружение не рассматривается):