日期:2014-05-20  浏览次数:20743 次

求助:如何在图片里显示中文?
RedLinux   9,   区域为en,完全安装(所有软件包、语言、字体),能够正常浏览中文网站。
//JSP代码
<%@   page   contentType= "image/jpeg;   charset=gb2312 "   %>

<%@   page   import= "
java.io.*,
java.awt.*,
java.awt.image.*,
com.sun.image.codec.jpeg.* "%>

<%
//设置页面不缓存
response.setHeader( "Pragma ", "No-cache ");
response.setHeader( "Cache-Control ", "no-cache ");
response.setDateHeader( "Expires ",   0);
System.setProperty( "java.awt.headless ",   "true ");
out.clear();

//创建内存图像
BufferedImage image =   new   BufferedImage(320,   240,   BufferedImage.TYPE_3BYTE_BGR);
Graphics2D   g =   image.createGraphics();

g.setFont(new   Font( "楷体_G2312 ",   Font.PLAIN,   24));
String title =   new   String( "中文问题 ".getBytes( "ISO8859_1 "), "GB2312 ");
g.drawString(title,   50,   50);//显示????
g.drawString( "中文问题 ",   50,   150);//显示4个方框
g.dispose();

//输出到浏览器
javax.imageio.ImageIO.write(image,   "JPEG ",   response.getOutputStream());
%>

这些代码出来的图片,中文要么是4个问号,要么是4个方框。

查过其它的中文乱码问题,找不到,都是关于参数提交,或都从文件读取的。

有哪位大侠能指点指点?万分感激……


------解决方案--------------------
在图像中画文字后,显示就是乱码?
那就可能是发送的BufferedImage中的数据还不是像素数据.不过你可以试一下先把BufferedImage用PixelGrabber转化成像素数据,然后再用MemoryImageSource把像素数据转化成图片,然后再把图片发送到浏览器,我想这样应该可以把图像显示出来.因为图片的像素数据显示与字符编码无关,就如在不支持中文的系统上显示含有中文的图片一样正常,因为里面根本就不是字符,而是一些像素的颜色值.
------解决方案--------------------
g.setFont(new Font( "宋体 ", Font.PLAIN, 24));
------解决方案--------------------
RedLinux 9上面我就不知道了,我用windows XP上面我试过可以的.
<%@ page contentType= "image/jpeg; charset=gb2312 " %>

<%@ page import= "
java.io.*,
java.awt.*,
java.awt.image.*,
com.sun.image.codec.jpeg.* "%>

<%
//设置页面不缓存
response.setHeader( "Pragma ", "No-cache ");
response.setHeader( "Cache-Control ", "no-cache ");
response.setDateHeader( "Expires ", 0);
System.setProperty( "java.awt.headless ", "true ");
out.clear();

//创建内存图像
BufferedImage image= new BufferedImage(320, 240, BufferedImage.TYPE_3BYTE_BGR);
Graphics2D g= image.createGraphics();

g.setFont(new Font( "楷体_G2312 ", Font.PLAIN, 24));
String title= new String( "中文问题 ");  //这里后面不要了.
g.drawString(title, 50, 50);//显示????
g.drawString( "中文问题 ", 50, 150);//显示4个方框
g.dispose();

//输出到浏览器
javax.imageio.ImageIO.write(image, "JPEG ", response.getOutputStream());
%>
------解决方案--------------------
"楷体_G2312 "这个字体在本地有吗?还有,引号里有个空格。。。