如何用servlet在客户端生成一个合成图片

北大青鸟大学城校区logo 北大青鸟大学城校区
招生简章校园环境师资力量就业明星招生问答软件工程师北京大学学历学员项目联系我们 报名通道

免费在线咨询通道>>

免费在线报名通道>>

北大青鸟报名电话
当前位置:北大青鸟 > 软件教程 > web前端开发 >

如何用servlet在客户端生成一个合成图片

标签:   分类:web前端开发


如何用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();

若有疑问请拨打北大青鸟咨询热线:010-80146691或点击免费在线咨询!
  • xml地图 网站地图 招生简章 合作企业 学员项目 联系我们
  • 关闭窗口