iteye_18963 2010-03-26 21:09
浏览 230
已采纳

UNIX下 Java将文字输出成图片问题

程序是WEB应用,部署在Linux Windows下都没有问题

但是部署到万网的服务器(Unix)下,文字输出成图片,中文就变成了一个个小方块。
我在程序中打印出文字都是汉字,具体代码如下

public void createTextImage(Text text, String destpath) throws IOException {
File img = new File(destpath);
int size = (int) (text.getSize() / text.getRate());

    int width = getLength(text.getText()) * (size + 4); // 设置宽度
    int height = size + 10; // 设置高度
    System.out.print("文字信息:" + text.getSize() + "|缩放:" + text.getRate()
            + "|最终大小:" + size + "|文字内容:" + text.getText() + "|字体:"
            + text.getFamily());
    Font font = new Font(text.getFamily(), text.getItalic()
            + text.getBold(), size);
    BufferedImage bi = new BufferedImage(width, height,
            BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = bi.createGraphics();
    // ---------- 增加下面的代码使得背景透明 -----------------
    bi = g2.getDeviceConfiguration().createCompatibleImage(width, height,
            Transparency.TRANSLUCENT);
    g2.dispose();
    g2 = bi.createGraphics();
    // ---------- 背景透明代码结束 -----------------
    g2.setColor(new Color(Integer.parseInt(text.getColor(), 16)));
    g2.setFont(font);
    /**
     * 设置文字在图片中的位置
     * 
     * 这里是居中
     */
    FontRenderContext context = g2.getFontRenderContext();
    Rectangle2D bounds = font.getStringBounds(text.getText(), context);
    double x = (width - bounds.getWidth()) / 2;
    double y = (height - bounds.getHeight()) / 2;
    double ascent = -bounds.getY();
    double baseY = y + ascent;
    System.out.println("画图之前的文字:" + text.getText());
    /**
     * 防止生成的文字带有锯齿
     */
    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
            RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    g2.drawString("你好", (int) x, (int) baseY);//即使这里写死了 生成的图片也还是小方块

    // g2.drawString(text.getText(), (width - (getLength(text.getText()) *
    // text.getSize())) / 2, height);

    g2.dispose();

    ImageIO.write(bi, "PNG", img);
}

有Unix经验的朋友帮忙看下哈

  • 写回答

3条回答 默认 最新

  • suziwen 2010-03-26 21:59
    关注

    本人自己机子的经验,
    运行JAVA的程序如果出现一堆问号,则是JAVA的某个环节编码混乱导致乱码。

    出现小方块的,都是JDK里没有装需要的中文字体。

    小方块说明万网的服务器没有安装JDK的中文字体
    {/usr/lib/jdk1.6.0_14//JDK的安装路径}/jre/lib/fonts

    可以看看这个文章解决方块问题

    [url]http://www.ibm.com/developerworks/cn/websphere/library/techarticles/yangyaping0307/waslinux.html
    [/url]
    如果你能在服务器上自己装JDK就好解决了,如果不行,你可能得联系万网的人了 :D :D :D :D

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧