使用jquery jcrop外掛進行圖片的擷取與儲存
阿新 • • 發佈:2019-02-05
第一步:上傳大圖片到伺服器,並且展示到頁面
第二部:呼叫jcrop元件js及css
- <scriptsrc="${ctx}/js/jquery-jcrop/jquery.Jcrop.js"></script>
- <linkrel="stylesheet"href="${ctx}/css/jquery-jcrop/jquery.Jcrop.css"type="text/css"/>
第三部:採用外掛
進行圖片的選取,其中主要包括x,y,width,height
-
$('#cropButton').click(
- var x = $("#x").val();
- var y = $("#y").val();
- var w = $("#w").val();
- var h = $("#h").val();
- if(w == 0 || h == 0 ){
- alert("您還沒有選擇圖片的剪下區域,不能進行剪下圖片!");
- return;
- }
-
//alert("你要剪下圖片的X座標: "+x + ",Y座標: " + y + ",剪下圖片的寬度: " + w + ",高度:" + h );
- if(confirm("確定按照當前大小剪下圖片嗎")){
- //document.form1.submit();
- //$("#makeHeadImgDiv").toggle();
- function loadHeadUrl(data){
- //alert(data.headUrl);
- alert(data.retMsg);
-
$("#img_headUrl"
- $("#headUrl").val(data.headUrl);
- //alert($("#headUrl").val());
- }
- var url="${ctx}/admin/pri/guest/guest_cutHeadImg.action";
- var options ={
- //beforeSubmit: validate,
- url: url,
- success: loadHeadUrl,
- type: 'post',
- dataType: 'json'
- };
- $('#cutHeadImgFrm').ajaxSubmit(options);
- }
- });
然後呼叫後臺方法切割圖片。
設計的包:
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import java.awt.color.ColorSpace;
import javax.imageio.ImageIO;
第四部:儲存新檔案路徑,展示圖片到頁面。
方法類:
- package com.wondertek.meeting.util;
- import java.io.*;
- import java.awt.*;
- import java.awt.image.*;
- import java.awt.Graphics;
- import java.awt.color.ColorSpace;
- import javax.imageio.ImageIO;
- publicclass ImageCut {
- /**
- * 影象切割(改) *
- * @param srcImageFile 源影象地址
- * @param dirImageFile 新影象地址
- * @param x 目標切片起點x座標
- * @param y 目標切片起點y座標
- * @param destWidth 目標切片寬度
- * @param destHeight 目標切片高度
- */
- publicstaticvoid abscut(String srcImageFile,String dirImageFile, int x, int y, int destWidth,
- int destHeight) {
- try {
- Image img;
- ImageFilter cropFilter;
- // 讀取源影象
- BufferedImage bi = ImageIO.read(new File(srcImageFile));
- int srcWidth = bi.getWidth(); // 源圖寬度
- int srcHeight = bi.getHeight(); // 源圖高度
- if (srcWidth >= destWidth && srcHeight >= destHeight) {
- Image image = bi.getScaledInstance(srcWidth, srcHeight,
- Image.SCALE_DEFAULT);
- // 改進的想法:是否可用多執行緒加快切割速度
- // 四個引數分別為影象起點座標和寬高
- // 即: CropImageFilter(int x,int y,int width,int height)
- cropFilter = new CropImageFilter(x, y, destWidth, destHeight);
- img = Toolkit.getDefaultToolkit().createImage(
- new FilteredImageSource(image.getSource(), cropFilter));
- BufferedImage tag = new BufferedImage(destWidth, destHeight,
- BufferedImage.TYPE_INT_RGB);
- Graphics g = tag.getGraphics();
- g.drawImage(img, 0, 0, null); // 繪製縮小後的圖
- g.dispose();
- // 輸出為檔案
- ImageIO.write(tag, "JPEG", new File(dirImageFile));
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 縮放影象
- *
- * @param srcImageFile 源影象檔案地址
- * @param result 縮放後的影象地址
- * @param scale 縮放比例
- * @param flag 縮放選擇:true 放大; false 縮小;
- */
- publicstaticvoid scale(String srcImageFile, String result, int scale,
- boolean flag) {
- try {
- BufferedImage src = ImageIO.read(new File(srcImageFile)); // 讀入檔案
- int width = src.getWidth(); // 得到源圖寬
- int height = src.getHeight(); // 得到源圖長
- if (flag) {
- // 放大
- width = width * scale;
- height = height * scale;
- } else {
- // 縮小
- width = width / scale;
- height = height / scale;
- }
- Image image = src.getScaledInstance(width, height,Image.SCALE_DEFAULT);
- BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
- Graphics g = tag.getGraphics();
- g.drawImage(image, 0, 0, null); // 繪製縮小後的圖
- g.dispose();
- ImageIO.write(tag, "JPEG", new File(result));// 輸出到檔案流
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 重新生成按指定寬度和高度的影象
- * @param srcImageFile 源影象檔案地址
- * @param result 新的影象地址
- * @param _width 設定新的影象寬度
- * @param _height 設定新的影象高度
- */
- publicstaticvoid scale(String srcImageFile, String result, int _width,int _height) {
- scale(srcImageFile,result,_width,_height,0,0);
- }
- publicstaticvoid scale(String srcImageFile, String result, int _width,int _height,int x,int y) {
- try {
- BufferedImage src = ImageIO.read(new File(srcImageFile)); // 讀入檔案
- int width = src.getWidth(); // 得到源圖寬
- int height = src.getHeight(); // 得到源圖長
- if (width > _width) {
- width = _width;
- }
- if (height > _height) {
- height = _height;