在servlet中,怎么在已有的jpg图像上,画一个圆圈以生成新的图片??

解决方案 »

  1.   

    做一个filter, 技术上好像把图片读到imagebuffer,然后根据要求调节,你自己查查
      

  2.   

    package com.gzh.otherutil.filters;import javax.servlet.ServletRequest;
    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;
        }
    }