JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--JAVA技术--声音图片  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
如何用servlet在客户端生成一个合成图片
作者:未知     文章来源:www.jspcn.net
访问次数:767次     加入时间:2005年01月19日
如何用servlet在客户端生成一个合成图片
一根麻绳

实际上我们可以在客户端生成一个用graphics画的图
或者也可以在客户端转发一个从服务器取来的图片
但如何集成多个gif,jpg图片生成一个大的图片,同时还有自己画的图就不容易了,
比如:

我上上星期遇到了这个困难,所幸把这个问题解决了。大家都是程序员,各种api我也不用解释了,就把代码贴出来好了,我会在必要的地方加上注释。
总共有三个文件
showImage-------------------------------servlet
PdrawInstImage ------------------------服务器端运行的java画图程序
servlet
public class showImage extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{

try{
String servername = req.getServerName();
String port = ""+req.getServerPort();
WorkflowConnector connector = new WorkflowConnector();
connector.connect("t3://"+servername+":"+port, null, null);
String instProcessId = req.getParameter("ipid");

InstProcessInfo instInfo = connector.getAdmin().getInstProcessInfo(instProcessId);
ProcessInfo processInfo = connector.getDefinition().getProcess(instInfo.getDefProcessId());
PDrawInstImage imgCreator = new PDrawInstImage(processInfo,instInfo);
imgCreator.drawAll();
BufferedImage bufferedImage = imgCreator.getBufferedImage();
res.setContentType("image/jpeg"); //设置返回的文件类型
OutputStream out=res.getOutputStream(); //得到向客户端输出二进制数据的对象
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(bufferedImage);
out.close();
}
catch(Exception e) //错误处理
{
e.printStackTrace();
PrintWriter toClient = res.getWriter(); //得到向客户端输出文本的对象
res.setContentType("text/html;charset=gb2312");
toClient.write("无法打开图片!");
toClient.close();
}

}
}

public class PDrawInstImage {
/** 图形缓存 */
static BufferedImage bufferedImage;
/** 画图接口 */
Graphics2D big;
放在服务器端的java程序
/**
* 创建图形缓存。
*/
public void creatBufferImage(){
bufferedImage = new BufferedImage((int)jpgDimension.getWidth(),(int)jpgDimension.getHeight(),BufferedImage.TYPE_3BYTE_BGR);
big = bufferedImage.createGraphics();
}
/**
* 返回图形数据缓冲区。
*/
public BufferedImage getBufferedImage(){
return this.bufferedImage;
}
这个方法里面,采用一个空的frame作为图像观察器,一个MediaTracker作为辅助跟踪,不这么用好象还真不行,具体原因,再看点书,我也许能明白
private void drawTipImage(byte[] bytes){
try{
Frame frame = new Frame();
frame.addNotify();
MediaTracker mt = new MediaTracker(frame);// frame acts as an ImageObserver
Image image = Toolkit.getDefaultToolkit().createImage(bytes);
mt.addImage(image, 0);
mt.waitForAll();
int tipW = image.getWidth(frame);
int tipH = image.getHeight(frame);
int xx = X +(WIDTH - tipW)/2;
int yy = Y +(HEIGHT- tipH)/2;
big.drawImage(image,xx,yy,frame);
}catch(Exception e){
e.printStackTrace();
}
}
private void drawShape(){
int minorType = activityInfo.getMinorType();
drawTipImage(ImageFactory.getImageData(minorType));
}
public static byte[] getImageData(int minorType){
byte[] bytes = null;
try
{
URL iconURL = getResource(getActivityName(minorType));
if(iconURL != null)
{
InputStream is = iconURL.openStream();
int avail = is.available();
bytes = new byte[avail];
is.read(bytes,0,avail);
}
}
catch(Exception e)
{
e.printStackTrace();
}
return bytes;
}
特别强调,image实际上可以直接通过
Image image = Toolkit.getDefaultToolkit().getImage(
display.imageFile);
这种方式获得,然而我在实际运行中,却一直得不到图片,我想,java在这块实行了“惰性机制”,画图是要到真画时才加载,又不支持非本地调用,所以通过servlet就无法调用到图片资源,具体细节我还是不太清楚,但不管怎么说的换一种方式,所以我们用下面的方法,先在本地服务器获取图片的数组信息,然后把他组装成图片。
这个方法主要是用来
public byte[] getImageData(int minorType){
byte[] bytes = null;
try
{
URL iconURL = getResource(getActivityName(minorType));
if(iconURL != null)
{
InputStream is = iconURL.openStream();
int avail = is.available();
bytes = new byte[avail];
is.read(bytes,0,avail);
}
}
catch(Exception e)
{
e.printStackTrace();
}
return bytes;
}
}
 
Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号