jsp+servlet开发的在线杂志封面制作源码

jsp+servlet开发的在线杂志封面制作源码

//@author luce

1.前台,上传一张图片,并传值开始切点的坐标和杂志封面模板(png格式)的编号

2.用java裁剪图片

3.java图片合成"上传用户图片与杂志封面模板合成"

//------------

package duba.common.tools;

import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

public class CutImage {
  //===源图片路径名称如:c:/1.jpg
    private String srcpath ;
        
    //===剪切图片存放路径名称.如:c:/2.jpg
    private String subpath ;
   
    //===剪切点x坐标
    private int x ;
   
    private int y ;   
     
    //===剪切点宽度
    private int width ;
    
    private int height ;
   
    public CutImage(){
           
    } 
    public CutImage(int x,int y,int width,int height){
        this.x = x ;
        this.y = y ;
        this.width = width ;  
        this.height = height ;
   }
  
   /** *//**
    * 对图片裁剪,并把裁剪完蛋新图片保存 。
    */
   public void cut() throws IOException{
       
       FileInputStream is = null ;
       ImageInputStream iis =null ;
    System.out.println("-----------------cut Image-----------2");
       try{  
           //读取图片文件
           is = new FileInputStream(srcpath);
        System.out.println("-----------------cut Image-----------44");
           /**//*
            * 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader
            * 声称能够解码指定格式。 参数:formatName - 包含非正式格式名称 .
            *(例如 "jpeg" 或 "tiff")等 。
            */
           Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName("jpg"); 
           ImageReader reader = it.next();
           //获取图片流
           iis = ImageIO.createImageInputStream(is);
             
           /**//*
            * <p>iis:读取源.true:只向前搜索 </p>.将它标记为 ‘只向前搜索’。
            * 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader
            *  避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。
            */
           reader.setInput(iis,true) ;
          
           /**//*
            * <p>描述如何对流进行解码的类<p>.用于指定如何在输入时从 Java Image I/O
            * 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件
            * 将从其 ImageReader 实现的 getDefaultReadParam 方法中返回
            * ImageReadParam 的实例。 
            */
           ImageReadParam param = reader.getDefaultReadParam();
           
           /**//*
            * 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象
            * 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。
            */
           Rectangle rect = new Rectangle(x, y, width, height);
          
        System.out.println("-----------------cut Image4-----------");
           //提供一个 BufferedImage,将其用作解码像素数据的目标。
           param.setSourceRegion(rect);

           /**//*
            * 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将
            * 它作为一个完整的 BufferedImage 返回。
            */
           BufferedImage bi = reader.read(0,param);               
           System.out.println("成功生成");
           //保存新图片
           ImageIO.write(bi, "jpg", new File(subpath));    
       }
      
       finally{
           if(is!=null)
              is.close() ;      
           if(iis!=null)
              iis.close(); 
       }
      
       
   
   }

   public int getHeight() {
       return height;
   }

   public void setHeight(int height) {
       this.height = height;
   }

   public String getSrcpath() {
       return srcpath;
   }

   public void setSrcpath(String srcpath) {
       this.srcpath = srcpath;
   }

   public String getSubpath() {
       return subpath;
   }

   public void setSubpath(String subpath) {
       this.subpath = subpath;
   }

   public int getWidth() {
       return width;
   }

   public void setWidth(int width) {
       this.width = width;
   }

   public int getX() {
       return x;
   }

   public void setX(int x) {
       this.x = x;
   }

   public int getY() {
       return y;
   }

   public void setY(int y) {
       this.y = y;
   }
   //public static void main(String[] args)throws Exception{
      
     //  String name = "d:/1.jpg";
      
    //   CutImage o = new CutImage(100,100,100,100);
    //   o.setSrcpath(name); 
    //   o.setSubpath("D:/2.jpg");
   //    o.cut() ; 
        
 //  }


}
//-------------------------------------------------------------------servlet 调用

package duba.servlets;

import java.io.*;
import java.util.Calendar;
import java.awt.*;
import java.awt.image.*;
import duba.common.tools.CutImage;
import javax.imageio.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.imageio.ImageWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import sun.awt.image.GifImageDecoder;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
public class CreateImageServlet extends HttpServlet {

 /**
  * Constructor of the object.
  */
 public CreateImageServlet () {
  super();
 }

 /**
  * Destruction of the servlet. <br>
  */
 public void destroy() {
  super.destroy(); // Just puts "destroy" string in log
  // Put your code here
 }

 /**
  * The doGet method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to get.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doPost(request,response);
  }
 
 /**
  * The doPost method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to post.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   System.out.println("-----------------cut Image-----------");
   response.setContentType("text/html;charset=GB2312");
   response.addHeader("Cache-Control","no-cache");
   response.addHeader("Expires","Thu,01 Jan 1970 00:00:01 GMT");
   PrintWriter pageout = response.getWriter();
   HttpSession session=request.getSession();
      int x=0;int y=0;String c="1";
      if(request.getParameter("x")!=null)
       x=Integer.parseInt(request.getParameter("x").toString());
      if(request.getParameter("y")!=null)
      y=Integer.parseInt(request.getParameter("y").toString());
      if(request.getParameter("c")!=null)
       c=request.getParameter("c").toString();
      String name =" ";
      if(session.getAttribute("Magazinefmname")!=null){
      name="../webapps/duba/magazine/userup_pic/"+session.getAttribute("Magazinefmname").toString();
      session.removeAttribute("Magazinefmname"); 
      }
      CutImage o = new CutImage(x,y,280,395);
      o.setSrcpath(name); 
      Calendar calendar = Calendar.getInstance();
      String filename = "cutpic"+String.valueOf(calendar.getTimeInMillis())+".jpg"; //毫秒记名

      o.setSubpath("../webapps/duba/magazine/userup_pic/"+filename);
      o.cut() ; 
      System.out.println("-----------------cut Image图片合成-----------");
      System.out.println("剪切的文件名为"+filename);
      File file1 = new File("../webapps/duba/magazine/userup_pic/"+filename); //底层图片
      File file2 = new File("../webapps/duba/magazine/cover/cover"+c+".png"); //上层图片
      Image src = javax.imageio.ImageIO.read(file1);  
      System.out.print("底层图片加载完成...");
      System.out.print("上层图片加载完成...");
      Image src2 = javax.imageio.ImageIO.read(file2); 
      int width=src.getWidth(null);                                     //得到源图宽
      int height=src.getHeight(null);                                    //得到源图长
      BufferedImage tag = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
      String filename2 = "coverpic"+String.valueOf(calendar.getTimeInMillis()); //毫秒记名
      FileOutputStream out=new FileOutputStream("../webapps/duba/magazine/userup_pic/"+filename2+".jpg");     //输出到文件流,生成最后的杂志封面
      System.out.print("杂志封面图片生成完成...文件名为:"+filename2+".jpg");
      session.setAttribute("coveruserPic", filename2+".jpg");
      Graphics g = tag.createGraphics();
      g.fillRect(0,0,width,height);
      g.setClip(0, 0, width, height);
      g.drawImage(src,0,0,width,height,null);
      g.drawImage(src2,0,0,width,height,null);
      g.dispose();
      System.out.print(g.getColor());
      //GifImageDecoder gifencod=ImageDecoder.
      JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);     
      encoder.encode(tag);                                               //近JPEG编码
      System.out.print(width+"*"+height);                            
      out.close();
      pageout.print("<SCRIPT language=''javascript''>"); 
   pageout.print("window.top.location=/"../magazine/CoverPic_gen.jsp /"");
   pageout.print("</SCRIPT>");
 }

 /**
  * Initialization of the servlet. <br>
  *
  * @throws ServletException if an error occure
  */
 public void init() throws ServletException {
  // Put your code here
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值