image-cropper 是一个很好的 Jquery插件,可以实现图片的选择,旋转,剪切。 可以用做网站头像的处理。

点击"DONE"按钮,会向后端发送 JSON切割数据,后端的 java代码如下:

package net.watermelon.core.util;

import java.io.*;

import java.awt.*;

import java.awt.image.*;

import java.awt.Graphics;

import java.awt.color.ColorSpace;

import javax.imageio.ImageIO;

public class ImageCut {

public static BufferedImage cut(BufferedImage inputImage,int x,int y,int width,int height,boolean fill){

//获取原始图像透明度类型

int type =BufferedImage.TYPE_INT_RGB;// inputImage.getColorModel().getTransparency();

int w = inputImage.getWidth();

int h = inputImage.getHeight();

int endx=x+width;

int endy=y+height;

if(x>w)

throw new ImagingOpException("起点横坐标超出源图像范围");

if(y>h)

throw new ImagingOpException("起点纵坐标超出源图像范围");

BufferedImage img;

//补白

if(fill){

img = new BufferedImage(width, height, type);

//宽度超出限制

if((w-x)

width=w-x;

endx=w;

}

//高度超出限制

if((h-y)

height=h-y;

endy=h;

}

//不补

}else{

//宽度超出限制

if((w-x)

width=w-x;

endx=w;

}

//高度超出限制

if((h-y)

height=h-y;

endy=h;

}

img = new BufferedImage(width, height, type);

}

Graphics2D graphics2d =img.createGraphics();

BufferedImage imageNew = graphics2d.getDeviceConfiguration().createCompatibleImage(width, height,

Transparency.TRANSLUCENT);

graphics2d =imageNew.createGraphics();

graphics2d.drawImage(inputImage, 0, 0, width, height, x, y, endx, endy, null);

graphics2d.dispose();

return imageNew;

}

/**

* 缩放图像

*

* @param srcImageFile       源图像文件地址

* @param result             缩放后的图像地址

* @param scale              缩放比例

* @param flag               缩放选择:true 放大; false 缩小;

*/

public static void 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            设置新的图像高度

*/

public static void scale(String srcImageFile, String result, int _width,int _height) {

scale(srcImageFile,result,_width,_height,0,0);

}

public static void 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;

}

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, x, y, null); // 绘制缩小后的图

g.dispose();

ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)

*/

public static void convert(String source, String result) {

try {

File f = new File(source);

f.canRead();

f.canWrite();

BufferedImage src = ImageIO.read(f);

ImageIO.write(src, "JPG", new File(result));

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 彩色转为黑白

*

* @param source

* @param result

*/

public static void gray(String source, String result) {

try {

BufferedImage src = ImageIO.read(new File(source));

ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);

ColorConvertOp op = new ColorConvertOp(cs, null);

src = op.filter(src, null);

ImageIO.write(src, "JPEG", new File(result));

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 选择任意角度

* @param bufferedimage

* @param degree

* @return

*/

public static Rectangle CalcRotatedSize(Rectangle src, int angel) {

// if angel is greater than 90 degree, we need to do some conversion

angel = Math.abs(angel);

if (angel >= 90) {

if(angel / 90 % 2 == 1){

int temp = src.height;

src.height = src.width;

src.width = temp;

}

angel = angel % 90;

}

double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2;

double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;

double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2;

double angel_dalta_width = Math.atan((double) src.height / src.width);

double angel_dalta_height = Math.atan((double) src.width / src.height);

int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha

- angel_dalta_width));

int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha

- angel_dalta_height));

int des_width = src.width + len_dalta_width * 2;

int des_height = src.height + len_dalta_height * 2;

return new java.awt.Rectangle(new Dimension(des_width, des_height));

}

public static BufferedImage Rotate(Image src, int angel) {

int src_width = src.getWidth(null);

int src_height = src.getHeight(null);

// calculate the new image size

Rectangle rect_des = CalcRotatedSize(new Rectangle(new Dimension(

src_width, src_height)), angel);

BufferedImage res = null;

res = new BufferedImage(rect_des.width, rect_des.height,

BufferedImage.TYPE_INT_RGB);

Graphics2D g2 = res.createGraphics();

BufferedImage imageNew = g2.getDeviceConfiguration().createCompatibleImage(rect_des.width, rect_des.height,

Transparency.TRANSLUCENT);

g2 = imageNew.createGraphics();

// transform

g2.translate((rect_des.width - src_width) / 2,

(rect_des.height - src_height) / 2);

g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);

g2.drawImage(src, null, null);

return imageNew;

}

public static void main(String[] argv) throws Exception{

String srcImageFile="c:\\model2.jpg";

BufferedImage img =ImageIO.read(new File(srcImageFile));

BufferedImage nimg = ImageCut.Rotate(img,0);

img = ImageCut.cut(nimg,89,43,101,101,true);

ImageIO.write(img, "png", new File("c:\\model21.png"));

}

}

可以简单地完成头像的切割和保存。

java cropper_Image Cropper 的 JAVA 支持相关推荐

  1. 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题

    在项目中使用Apache开源的Services Framework CXF来发布WebService,CXF能够很简洁与Spring Framework 集成在一起,在发布WebService的过程中 ...

  2. IDEA报错解决:Error:(33, 35) java: -source 7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)

    晚上在用IDEA的时候遇到了报错: Error:(33, 35) java: -source 7 中不支持 lambda 表达式(请使用 -source 8 或更高版本以启用 lambda 表达式) ...

  3. 如何修复java.lang.UnsupportedClassVersionError:不支持的major.minor版本

    本文翻译自:How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version I am trying ...

  4. Java中switch都可以支持哪些数据类型

    Java中switch都可以支持哪些数据类型 在JDK1.5之前,switch循环只支持byte short char int四种数据类型. JDK1.5 在switch循环中增加了枚举类与byte ...

  5. openshift 部署_OpenShift Express:部署Java EE应用程序(支持AS7)

    openshift 部署 在过去的几年中,我越来越多地听说过"云"服务. 最初,我并不是很想尝试一下. 但是几个月后(一年?),我决定看看这是怎么回事. 我从事Java EE开发已 ...

  6. OpenShift Express:部署Java EE应用程序(支持AS7)

    在过去的几年中,我越来越听到有关"云"服务的信息. 最初,我并不是很想尝试一下. 但是几个月后(一年?),我决定看看这是怎么回事. 我从事Java EE开发已经超过7年了,所以我决 ...

  7. JeeWx捷微2.4.1版本发布,JAVA微信管家平台(支持公众号、企业号)

    JeeWx捷微2.4.1版本发布,JAVA微信管家平台(支持公众号.企业号) 1.JEEWX平台介绍  Jeewx是一款开源.敏捷.组件化的微信管家平台,支持微信公众号.微信企业号管理,采用JAVA语 ...

  8. JeeWx捷微 2.4.1版本发布,开源JAVA微信管家平台(支持公众号、企业号)

    JeeWx捷微2.4.1版本发布,JAVA微信管家平台(支持公众号.企业号) 1.JEEWX平台介绍  Jeewx是一款开源.敏捷.组件化的微信管家平台,支持微信公众号.微信企业号管理,采用JAVA语 ...

  9. Java类型推断将不再支持可变性规范

    Java类型推断是一项推荐的Java特性,允许开发人员使用var关键字代替显式的变量类型声明.最近的报道显示,由于社区内无法就区分可变和不可变变量的实现方式达成一致意见,Java类型推断将不再支持使用 ...

  10. 观察者模式--java jdk中提供的支持

    一.简介 观察者设计模式有如下四个角色 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象 ...

最新文章

  1. python模块初始与time、datetime及random
  2. Android UI(三)SlidingMenu实现滑动菜单(详细 官方)
  3. Jena增删改查java API
  4. mysql标准时间,MySQL时间设置
  5. 隐私和网络安全将是未来科技发展的屏障
  6. javascript-网页换肤案例
  7. c语言多线程详,如何用C语言实现多线程
  8. IOT(9)---MQTT 优缺点
  9. mfc大观之二(类识别)
  10. WinForm DevExpress使用之ChartControl控件绘制图表一——基础
  11. cf#94-div1-A. Statues
  12. 2、51单片机——I2C 总线
  13. kalibr fov畸变模型
  14. PS 超简单抠头发丝
  15. 树莓派mongodb实战
  16. Overvoltage category (过电压类别, 过电压等级)
  17. Django——admin功能、注册模型类、模型管理类
  18. 爬虫百战穿山甲(5)用大并发的手段批量爬取小图片
  19. 软件测试的核心竞争力是什么?
  20. CAD制图初学入门之CAD图纸集的使用技巧

热门文章

  1. Windows 7 多国语言包(MUI)
  2. 软媒硬盘装机 linux,魔方软媒硬盘装机一键搞定图文教程
  3. [ASP调试]小旋风Web服务器使用
  4. 网络管理员面试时常用的问题及答案
  5. Northwind数据库下载地址
  6. Anki显示音标问题
  7. 如何用photoshop做24色环_photoshop制作漂亮色环的教程(2)
  8. 绿色小巧的截图软件MyCatchScreen--程序员必备
  9. 联想Y7000安装ubuntu1604 双系统
  10. Windows10快速切换后台程序的快捷键!