`
guanxi
  • 浏览: 41689 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Image Cropper 的 JAVA 支持

 
阅读更多

     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"));

   }

}  

 

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

 

     

  • 大小: 136.6 KB
分享到:
评论

相关推荐

    (HOT)ImageCropper图片截取

    【标题】"ImageCropper图片截取"是一个热门的图像处理技术,主要涉及网页或应用程序中的图像裁剪功能。在现代互联网应用中,用户经常需要上传个人照片或图像,并可能需要按照特定尺寸或比例进行裁剪,以适应不同的...

    ImageCropper android裁剪

    - **裁剪形状**:`ImageCropper`支持矩形和圆形两种裁剪形状,满足不同应用场景的需求。例如,对于头像裁剪,圆形裁剪可能更为合适,因为它可以突出人物面部。 - **裁剪比例**:库可能提供预设比例,如1:1(正方形...

    Cropper 图片裁剪工具 --java

    首先,`Cropper`库主要是用JavaScript编写的,因此,尽管标题中提到了"Java",但在实际应用中,`Cropper`主要用于前端开发,与Java后端配合使用。它利用HTML5的`&lt;canvas&gt;`元素来处理图像,支持触摸操作,可以实现...

    cropper图片裁剪案例java-base64上传

    首先,`Cropper.js`是一个轻量级的图片裁剪库,支持触控操作,提供了丰富的API和配置选项,适用于响应式设计。它允许用户在前端自由选择图片的裁剪区域,生成裁剪后的图片数据。 在“cropper图片裁剪案例java-base...

    ImageCropper

    《ImageCropper——Java图像裁剪工具的深度解析》 在数字时代,图像处理技术已经渗透到我们生活的各个角落,无论是社交媒体的个性化头像,还是专业设计中的图像编辑,都需要用到图像裁剪功能。Java作为一门广泛使用...

    java-image-scaling-master

    常见结构可能包括一个或多个Java类,每个类负责特定的图像处理任务,如`ImageScaler`、`ImageCropper`、`ImageCompressor`和`ImageConverter`。项目可能还包含了测试用例和配置文件,便于开发者理解和使用。 总之,...

    Cropper-Image

    农作物Cropper 是一种... 支持 API 级别 7 及以上。 有关更多信息,请参阅链接的 Github Wiki 页面。安装构建.gradle repositories {mavenCentral()}dependencies { compile 'com.edmodo:cropper:1.0.1'}执照版权所有

    android图片或拍照选取指定区域的 完美解决方案

    implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' } ``` 添加依赖后,我们就可以开始编写代码了。首先是启动相机或相册选择图片的逻辑。在AndroidManifest.xml中,你需要添加相机和读取存储...

    JAVA快速图片剪切

    public class ImageCropper { public static void main(String[] args) { try { // 加载原始图片 BufferedImage originalImage = ImageIO.read(new File("原图路径")); // 定义剪切区域 Rectangle cropArea =...

    Android图片剪切并存入数据库

    图片剪切通常使用第三方库,如`android-image-cropper`。首先,引入该库,然后创建裁剪界面,并设置裁剪参数。用户在界面上拖动选择区域,最后调用裁剪方法得到裁剪后的图片。 ```java CropImage.activity(imageUri...

    图片裁剪前后台台js/java

    2. 裁剪交互:前端JS库如Cropper.js、Jcrop或ImageCrop提供了一套完整的图片裁剪解决方案。它们允许用户通过鼠标或触控进行选择区域,实时更新预览,并提供裁剪参数(如宽高比、坐标等)。 3. 事件监听:监听用户的...

    在Java中进行图片剪裁

    public class ImageCropper { public static void main(String[] args) { try { // 读取原始图像 BufferedImage originalImage = ImageIO.read(new File("原始图片路径")); // 定义剪裁区域 int x = 100; //...

    用cropImageView实现对图片的裁剪

    除了基本的裁剪功能,`CropImageView`还支持图片旋转、裁剪框移动和缩放等功能。开发者可以根据需要自定义裁剪菜单,调整裁剪框样式,以及设置裁剪的最小和最大尺寸等。 在实际项目中,我们还需要处理一些额外的...

    Android 图片剪裁

    首先,`ImageCropper-master`是一个包含完整源代码的项目,可以作为一个Library导入到你的Android工程中。这个库提供了丰富的图片处理功能,包括但不限于: 1. **图片选择**:用户可以从相册中选取图片或者直接通过...

    java javascript 图片切割

    核心的Java API提供了对图像处理的基本支持,如`java.awt.image.BufferedImage`类可以用于读取、创建和操作图像。在Java中进行图片切割,通常会用到`Graphics2D`接口,它提供了一系列的方法来绘制和操作图形对象,...

    js+jquery+java实现的头像上传和裁剪

    在本文中,我们将深入探讨如何使用JavaScript(JS)、jQuery和Java技术实现一个功能完善的头像上传和裁剪功能。这个功能通常应用于用户个人资料设置、社交媒体应用或网站中,允许用户选择并调整他们的个人头像。 ...

    java h5头像上传

    Java提供了多种库来处理图像,如Java Image I/O API或第三方库如ImageMagick、Guava等。通过调整压缩算法和质量参数,可以在保持图片质量的同时减小文件大小。 **5. Maven管理:** Maven作为项目构建工具,负责管理...

    基于jqueryajax+cropper+springboot的图片裁剪和存储程序.zip

    Cropper.js是一款轻量级的图片裁剪插件,支持移动端。它提供了图片的缩放、旋转、裁剪等操作,用户可以通过可视化的方式调整图片大小和形状,然后将裁剪结果传递给服务器。 3. **Spring Boot**: Spring Boot是...

    图片缩放.rar java实现的图片切割功能

    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 ...

    使用cropper.js裁剪头像的实例代码

    $image.cropper({ aspectRatio:1, viewMode:1, ready:function(){ croppable=true; } }); $button.on('click',function(){ // 裁剪逻辑 }); }); ``` 上述JavaScript代码实现了以下功能: - 初始化裁剪...

Global site tag (gtag.js) - Google Analytics