在servlet中,怎么在已有的jpg图像上,画一个圆圈以生成新的图片??
解决方案 »
- 我发现join在循环体使用中会出现意不到的结果,不知道是java的bug,还是我用法的问题.求高手指导
- 关于简单的逻辑判断
- 只能一列一列的取ResultSet结果集么?
- 新手想问线程是如何处理异常的呢?
- 请大家帮忙看看这段copy程序
- 连接MYSQL 出问题,比较急
- Java 中如何控制弹出窗口的关闭,类似于QQ的天气的弹窗
- 寻求Java较快的编译器?(JDK太慢了)
- 立刻就给100分关于select数据后在jtable上显示
- 但一次用jbuilder7,天啊!救救我吧!
- 大家过来看一下,Sun公司也解决不了的数据库连接池,连接泄露问题
- 請問:如何比較一個字符串是否有兩個相同的字符,如果有,去掉第一個字符?3Q!
import javax.servlet.ServletResponse;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletException;
import java.io.*;
import java.util.Date;
import java.awt.*;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.image.BufferedImage;/*
* @author gzh
*
* 图像过滤器
* 将消息 message和图像融合起来然后输出,相当于重新编辑图像信息
* 可以将图像中加入版权和商标等信息
* message在web.xml配置文件的 filter 下的 <filter-class> 下的<init-param>里指定
*/public class ImageFilter
implements Filter
{
FilterConfig filterConfig; public void init(final FilterConfig fConf)
{
filterConfig=fConf;
} public void destroy()
{
} public void doFilter(final ServletRequest request,
final ServletResponse response,FilterChain chain)
throws java.io.IOException,
javax.servlet.ServletException
{
String message="FilterMessage";
GenericResponseWrapper wrapper=new GenericResponseWrapper((
HttpServletResponse)response);
chain.doFilter(request,wrapper);
OutputStream out=response.getOutputStream();
message=filterConfig.getInitParameter("message"); if(contentIsUncachedImage(wrapper)&&message!=null)
{
ByteArrayOutputStream imageStream=manipulateImage(message,
wrapper.output());
response.setContentLength(imageStream.size());
response.setContentType("image/jpeg");
out.write(imageStream.toByteArray());
}
else
{
out.write(wrapper.output());
}
out.flush();
out.close();
} public boolean contentIsUncachedImage(GenericResponseWrapper wrapper)
{
if(wrapper.getContentType()!=null)
{
if(wrapper.getContentType().startsWith("image/"))
{
if(wrapper.output().length>0)
{
return true;
}
}
}
return false;
} public ByteArrayOutputStream manipulateImage(String message,
byte[] imageData)
throws ServletException
{
ByteArrayOutputStream imageStream;
Frame frame=null;
Graphics graphics=null;
try
{
frame=new Frame();
frame.addNotify();
MediaTracker mt=new MediaTracker(frame); // frame acts as an ImageObserver
Image image=Toolkit.getDefaultToolkit().createImage(imageData);
mt.addImage(image,0);
mt.waitForAll();
int w=image.getWidth(frame);
int h=image.getHeight(frame);
BufferedImage offscreen=new BufferedImage(w,h,
BufferedImage.TYPE_3BYTE_BGR);
graphics=offscreen.getGraphics();
graphics.drawImage(image,0,0,frame);
graphics.setColor(Color.white);
graphics.setFont(new Font("Arial",Font.BOLD|Font.ITALIC,20));
graphics.drawString(message,9,29);
graphics.setColor(Color.black);
graphics.drawString(message,10,30);
imageStream=new ByteArrayOutputStream();
JPEGImageEncoder encoder=com.sun.image.codec.jpeg.JPEGCodec.
createJPEGEncoder(imageStream);
encoder.encode(offscreen);
}
catch(InterruptedException e)
{
throw new ServletException(e.getMessage());
}
catch(IOException e)
{
throw new ServletException(e.getMessage());
}
finally
{
if(graphics!=null)
{
graphics.dispose();
}
if(frame!=null)
{
frame.removeNotify();
}
}
return imageStream;
}
}