? 今天做了一個Jsp頁面合成圖標的例子。
? 起因每次網上去合成Gmail圖片,覺得不爽
(偶這里聯網慢拉)。然后就找了一份合成Gmail圖片的代碼,http://playtime.uni.cc/downloads.php?page=gmail。下下來一看,php的,而且還需要一個GD的庫。不過代碼倒是看明白了。很短,也很無趣。
? 于是我就想能不能用Jsp合成圖標阿。
? 然后搜了一下,網上果然有介紹。于是就自己照貓畫虎做了一個愛因斯坦的圖片合成的例子。
???
? 下邊是代碼。總共不到100行。
? 通過測試,響應速度還挺快的
。這里是核心
部分
/*
?=====ImageGen.jsp========?
*/
<%
?@?page?language?
=
?
"
?java?
"
??contentType?
=
?
"
?image/jpeg?
"
???
%>
?
<%
?@?page?
import
?
=
?
"
?java.io.*?
"
???
%>
?
<%
?@?page?
import
?
=
?
"
?java.awt.*?
"
???
%>
?
<%
?@?page?
import
?
=
?
"
?java.awt.image.*?
"
???
%>
?
<%
?@?page?
import
?
=
?
"
?com.sun.image.codec.jpeg.*?
"
???
%>
?
<%
?
!
?
static
?Font?fnt??
=
???
null
?;??
%>
?
<%
?
!
?
static
?BufferedImage?bg??
=
???
null
?;??
%>
?
<%
?
?????
//
??DEBUG:??->???long??st??=??System.currentTimeMillis();
????request.setCharacterEncoding(?
"
?shift_jis?
"
?);
?????String??text??
=
??request.getParameter(?
"
?text?
"
?);
?????
if
?(text??
==
???
null
?)?text??
=
???
""
?;
?????
//
??DEBUG:??->??System.err.println(?"?text:??"?+?text);
?????
//
?because?font??and??background?need?only?read?once,?so?make?it?static.
?????
if
?(fnt??
==
???
null
?)?????
//
??handwriting?font?make?it?looks?funny.s
????????fnt??
=
??Font.createFont(Font.TRUETYPE_FONT,?
new
??FileInputStream(getServletContext().getRealPath(?
"
?/?
"
?)?
+
?
"
?LHANDW.TTF?
"
?));
?????
if
?(bg??
==
???
null
?)
????{
????????JPEGImageDecoder?decoder??
=
??JPEGCodec.createJPEGDecoder(?
new
??FileInputStream(getServletContext().getRealPath(?
"
?/?
"
?)?
+
?
"
?einstein.jpg?
"
?));
????????bg??
=
??decoder.decodeAsBufferedImage();
????}
?????
//
??draw?background
????
int
??width??
=
??bg.getWidth();
????
int
??height??
=
??bg.getHeight();
????BufferedImage?bi??
=
???
new
??BufferedImage(width,?height,?BufferedImage.TYPE_INT_RGB);
????Graphics2D?g??
=
??bi.createGraphics();
????g.drawImage(bg,?
0
?,?
0
?,?
null
?);
?????
//
??start?draw?text?that?user?input
????g.setColor(Color.WHITE);
????g.setFont(fnt.deriveFont(20f));
?????
int
??stringwidth??
=
??g.getFontMetrics().stringWidth(text);
????g.drawString(text,?
300
?
-
?stringwidth?
/
?
2
?,?
120
?);
?????
//
???end??draw
????g.dispose();
????bi.flush();
?????
//
??encode??and??output?result
????JPEGImageEncoder?encoder??
=
??JPEGCodec.createJPEGEncoder(response.getOutputStream());
????JPEGEncodeParam?param??
=
??encoder.getDefaultJPEGEncodeParam(bi);
????param.setQuality(?
1
?.0f,??
false
?);
????encoder.setJPEGEncodeParam(param);
????encoder.encode(bi);
?????
//
??DEBUG:??->??System.err.println(?"?Time?Cost:??"?+?(System.currentTimeMillis()??-??st));
%>
下邊是界面部分

/*?======Image.jsp======?*/
<%@?page?language="java"?contentType="text/html;charset=shift_jis"?%>
<%@?page?import="java.net.URLEncoder"?%>
<html>
<head>
????<title>Image?Gen</title>
????<meta?http-equiv="Content-Type"?content="text/html;?charset=shift_jis"?/>
</head>
<body>
<table?width="100%"?border="0"?align="center"?cellspacing="1">
<tr><td>
<%
????request.setCharacterEncoding("shift_jis");
????String?text?=?request.getParameter("text");
????if(text==null?||?text.length()?==?0)?text?=?"Please?input?!";
%>
<IMG?src=<%=?"ImageGen.jsp?text="+URLEncoder.encode(text,"shift_jis")?%>?border="0"?/>
</td></tr>
<tr?valign="top">
???<td>
????<form?name="gen"?action="Image.jsp"?method="post">
????????<!--?textarea?name="text"?rows="8"?cols="70"?-->
????????<input?name="text"?/>
????????<input?type="submit"?value="Create?Image"/>
????</form>
????</td>
</tr>
</table>
</body>
</html>
用到的圖片和字體在這里:
http://www.tkk7.com/Files/wenzhoou/Resource_JSPImgGen.zip
posted on 2006-03-22 18:48
不曾真實 閱讀(1131)
評論(3) 編輯 收藏 所屬分類:
JSP