以方块字符作为像素点显示图片
优点:可以不离开 Minecraft 界面,通过缩略图,大概判断群聊中图片的内容,从而提升游戏内外沟通效率。
缺点:分辨率真的很低(
ComponentBuilder bc = new ComponentBuilder();
BufferedImage bi = ImageIO.read(imgF.url);
int maxSize = 40;
double scale = Math.min(
(double) maxSize / bi.getWidth(),
(double) maxSize / bi.getHeight()
);
int targetWidth = (int) (bi.getWidth() * scale);
int targetHeight = (int) (bi.getHeight() * scale);
Image scaled = bi.getScaledInstance(targetWidth, targetHeight, Image.SCALE_SMOOTH);
BufferedImage resized = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = resized.createGraphics();
g.drawImage(scaled, 0, 0, null);
g.dispose();
StringBuilder sb = new StringBuilder();
for (int y = 0; y < resized.getHeight(); y++) {
for (int x = 0; x < resized.getWidth(); x++) {
int rgb = resized.getRGB(x, y);
int r = (rgb >> 16) & 0xFF;
int gr = (rgb >> 8) & 0xFF;
int b = rgb & 0xFF;
sb.append(colorHex(r, gr, b)).append("█");
}
sb.append("\n");
}
BaseComponent[] hover = TextComponent.fromLegacyText(sb.toString());
TextComponent tc = new TextComponent(ChatColor.UNDERLINE + "[图片]");
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text(hover)));
bc.append(tc);
流程简而言之:
降分辨率 -> 逐像素转换为带颜色标记的方块字符 -> 作为 HoverEvent.Action.SHOW_TEXT 添加到消息
具体实现使用方法:将鼠标指针悬浮到聊天框中的 [图片] 上,就能显示内容了

