且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Java实现图片裁剪预览功能

更新时间:2022-09-27 20:27:39

Java实现图片裁剪预览功能


在项目中,我们需要做些类似头像上传,图片裁剪的功能,ok看下面文章!


需要插件:jQuery Jcrop 

后端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package org.csg.upload;
 
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 Upload {
    /**
     * @author  小夜的传说
     * @param path1 图片原路径
     * @param path2  裁剪后存储的路径
     * @param x x轴
     * @param y y轴
     * @param w
     * @param h
     */
    public static void CutImage(String path1,String path2,int x,int y,int w,int h){
        FileInputStream fileInputStream=null;
        ImageInputStream iis=null;
         
        try {
            //读取图片文件,建立文件输入流
            fileInputStream=new FileInputStream(path1);
            //创建图片的文件流 迭代器
            Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName("jpg");
            ImageReader reader=it.next();
            //获取图片流 建立文图 文件流
            iis=ImageIO.createImageInputStream(fileInputStream);
            //获取图片默认参数
            reader.setInput(iis, true);
            ImageReadParam param=reader.getDefaultReadParam();
            //定义裁剪区域
            Rectangle rect=new Rectangle(x,y,w,h);
            param.setSourceRegion(rect);
            BufferedImage bi=reader.read(0,param);
            ImageIO.write(bi, "jpg"new File(path2));
        catch (Exception e) {
            e.printStackTrace();
            System.out.println("裁剪失败");
        }finally{
            try {
                if(fileInputStream!=null){
                    fileInputStream.close();
                }
                if(iis!=null){
                    iis.close();
                }
            catch (IOException e) {
                e.printStackTrace();
            }
             
        }
    }
}



访问代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page language="java" import="java.util.*,org.csg.upload.*" pageEncoding="utf-8"%>
<%
    //图片的相对路径
    String imagPath=request.getParameter("imgPath");
    String relPath=request.getRealPath("/");//获取图片服务器绝对地址
    String newFileName=new Date().getTime()+".jpg";
    //实际图片路径
    String path1=relPath+imagPath;
    //裁剪后存储到服务器的图片路径
    String path2=relPath+"/images/"+newFileName;
     
    int x=Integer.parseInt(request.getParameter("x"));
    int y=Integer.parseInt(request.getParameter("y"));
    int w=Integer.parseInt(request.getParameter("w"));
    int h=Integer.parseInt(request.getParameter("h"));
    try{
    Upload.CutImage(path1, path2, x, y, w, h);
    out.print("<img src='images/"+newFileName+"'/>");
    }catch(Exception e){
    e.printStackTrace();
    out.print("图片裁剪失败");
    }
%>



jsp代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Jsp开发头像裁剪</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <link rel="stylesheet" href="css/jquery.Jcrop.css" type="text/css" />
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery.Jcrop.min.js"></script>
      <style type="text/css">
      *{margin: 0;padding: 0;}
      .cut{
          margin-top: 20px;
      }
       #preview-pane {
          display: block;
          position: absolute;
          z-index: 2000;
          top: 10px;
          right: -280px;
          padding: 6px;
          border: 1px rgba(0,0,0,.4) solid;
          background-color: white;
          -webkit-border-radius: 6px;
          -moz-border-radius: 6px;
          border-radius: 6px;
          -webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
          -moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
          box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
    }
     
    #preview-pane .preview-container {
      width: 250px;
      height: 170px;
      overflow: hidden;
    }
      </style>
      <script type="text/javascript">
          $(function(){
              var jcrop_api,
            boundx="",
            boundy="",
            $preview = $('#preview-pane'),
            $pcnt = $('#preview-pane .preview-container'),
            $pimg = $('#preview-pane .preview-container img'),
            xsize = $pcnt.width(),
            ysize = $pcnt.height();
               $('#cutImage').Jcrop({
                 onChange:showCoords,//获取选中的值
                 onSelect:showCoords,//获取拖拽的值
                 aspectRatio: xsize / ysize
               },function(){
                  var bounds = this.getBounds();
                  boundx = bounds[0];
                  boundy = bounds[1];
                  jcrop_api = this;
                  $preview.appendTo(jcrop_api.ui.holder);
                });
               function showCoords(c){
                 var x=c.x;
                 var y=c.y;
                 var w=c.w;
                 var h=c.h;
                 $("#x1").val(parseInt(x));
                 $("#y1").val(parseInt(y));
                 $("#w").val(parseInt(w));
                 $("#h").val(parseInt(h));
               if (parseInt(c.w) > 0){
                    var rx = xsize / c.w;
                    var ry = ysize / c.h;
                    $pimg.css({
                      width: Math.round(rx * boundx) + 'px',
                      height: Math.round(ry * boundy) + 'px',
                      marginLeft: '-' + Math.round(rx * c.x) + 'px',
                      marginTop: '-' + Math.round(ry * c.y) + 'px'
                    });
                  }
               }
          });
      </script>
  </head>
  <body>
   <h1>Java开发QQ头像裁剪系统</h1>
   <div class="cut">
       <img id="cutImage" alt="" src="images/1.jpg" >
       <div id="preview-pane">
            <div class="preview-container">
              <img src="images/1.jpg" class="jcrop-preview" alt="Preview" />
            </div>
       </div>
   </div>
  <form action="success.jsp" method="post" >
      <input type="text" value="images/1.jpg" name="imgPath">
      x轴:<input type="text" size="4" id="x1" name="x" />
      y轴:<input type="text" size="4" id="y1" name="y"/>
      宽度:<input type="text" size="4" id="w" name="w"/>
      高度:<input type="text" size="4" id="h" name="h"/>
      <input type="submit" value="裁剪"/>
  </form>
  </body>
</html>



效果图:

Java实现图片裁剪预览功能










本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1672098,如需转载请自行联系原作者