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){
width=w-x;
endx=w;
}
//高度超出限制
if((h-y)<height){
height=h-y;
endy=h;
}
//不补
}else{
//宽度超出限制
if((w-x)<width){
width=w-x;
endx=w;
}
//高度超出限制
if((h-y)<height){
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"));
}
}
可以简单地完成头像的切割和保存。
相关推荐
【标题】"ImageCropper图片截取"是一个热门的图像处理技术,主要涉及网页或应用程序中的图像裁剪功能。在现代互联网应用中,用户经常需要上传个人照片或图像,并可能需要按照特定尺寸或比例进行裁剪,以适应不同的...
- **裁剪形状**:`ImageCropper`支持矩形和圆形两种裁剪形状,满足不同应用场景的需求。例如,对于头像裁剪,圆形裁剪可能更为合适,因为它可以突出人物面部。 - **裁剪比例**:库可能提供预设比例,如1:1(正方形...
首先,`Cropper`库主要是用JavaScript编写的,因此,尽管标题中提到了"Java",但在实际应用中,`Cropper`主要用于前端开发,与Java后端配合使用。它利用HTML5的`<canvas>`元素来处理图像,支持触摸操作,可以实现...
首先,`Cropper.js`是一个轻量级的图片裁剪库,支持触控操作,提供了丰富的API和配置选项,适用于响应式设计。它允许用户在前端自由选择图片的裁剪区域,生成裁剪后的图片数据。 在“cropper图片裁剪案例java-base...
《ImageCropper——Java图像裁剪工具的深度解析》 在数字时代,图像处理技术已经渗透到我们生活的各个角落,无论是社交媒体的个性化头像,还是专业设计中的图像编辑,都需要用到图像裁剪功能。Java作为一门广泛使用...
常见结构可能包括一个或多个Java类,每个类负责特定的图像处理任务,如`ImageScaler`、`ImageCropper`、`ImageCompressor`和`ImageConverter`。项目可能还包含了测试用例和配置文件,便于开发者理解和使用。 总之,...
农作物Cropper 是一种... 支持 API 级别 7 及以上。 有关更多信息,请参阅链接的 Github Wiki 页面。安装构建.gradle repositories {mavenCentral()}dependencies { compile 'com.edmodo:cropper:1.0.1'}执照版权所有
implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' } ``` 添加依赖后,我们就可以开始编写代码了。首先是启动相机或相册选择图片的逻辑。在AndroidManifest.xml中,你需要添加相机和读取存储...
public class ImageCropper { public static void main(String[] args) { try { // 加载原始图片 BufferedImage originalImage = ImageIO.read(new File("原图路径")); // 定义剪切区域 Rectangle cropArea =...
图片剪切通常使用第三方库,如`android-image-cropper`。首先,引入该库,然后创建裁剪界面,并设置裁剪参数。用户在界面上拖动选择区域,最后调用裁剪方法得到裁剪后的图片。 ```java CropImage.activity(imageUri...
2. 裁剪交互:前端JS库如Cropper.js、Jcrop或ImageCrop提供了一套完整的图片裁剪解决方案。它们允许用户通过鼠标或触控进行选择区域,实时更新预览,并提供裁剪参数(如宽高比、坐标等)。 3. 事件监听:监听用户的...
public class ImageCropper { public static void main(String[] args) { try { // 读取原始图像 BufferedImage originalImage = ImageIO.read(new File("原始图片路径")); // 定义剪裁区域 int x = 100; //...
除了基本的裁剪功能,`CropImageView`还支持图片旋转、裁剪框移动和缩放等功能。开发者可以根据需要自定义裁剪菜单,调整裁剪框样式,以及设置裁剪的最小和最大尺寸等。 在实际项目中,我们还需要处理一些额外的...
首先,`ImageCropper-master`是一个包含完整源代码的项目,可以作为一个Library导入到你的Android工程中。这个库提供了丰富的图片处理功能,包括但不限于: 1. **图片选择**:用户可以从相册中选取图片或者直接通过...
核心的Java API提供了对图像处理的基本支持,如`java.awt.image.BufferedImage`类可以用于读取、创建和操作图像。在Java中进行图片切割,通常会用到`Graphics2D`接口,它提供了一系列的方法来绘制和操作图形对象,...
在本文中,我们将深入探讨如何使用JavaScript(JS)、jQuery和Java技术实现一个功能完善的头像上传和裁剪功能。这个功能通常应用于用户个人资料设置、社交媒体应用或网站中,允许用户选择并调整他们的个人头像。 ...
Java提供了多种库来处理图像,如Java Image I/O API或第三方库如ImageMagick、Guava等。通过调整压缩算法和质量参数,可以在保持图片质量的同时减小文件大小。 **5. Maven管理:** Maven作为项目构建工具,负责管理...
Cropper.js是一款轻量级的图片裁剪插件,支持移动端。它提供了图片的缩放、旋转、裁剪等操作,用户可以通过可视化的方式调整图片大小和形状,然后将裁剪结果传递给服务器。 3. **Spring Boot**: Spring Boot是...
public class ImageCropper { public static void main(String[] args) { try { BufferedImage original = ImageIO.read(new File("原图路径")); int x = 100; // 起始X坐标 int y = 50; // 起始Y坐标 int ...
$image.cropper({ aspectRatio:1, viewMode:1, ready:function(){ croppable=true; } }); $button.on('click',function(){ // 裁剪逻辑 }); }); ``` 上述JavaScript代码实现了以下功能: - 初始化裁剪...