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

java图片裁剪原理

阅读更多

总体思想:

1.前台网页用js得到裁剪图片的id及x,y,宽度和高度。

2.服务端根据id取出要裁剪的图片 。

3.根据这些参数来生成裁剪的图像。

后台代码如下:

package  com.wodexiangce;

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;

/** */ /**
 * 
 *
 * 
@author  <a href="mailto:lqinglong@yahoo.cn">qinglong.lu</a>
 *
 * 2008-3-21
 
*/

public   class  OperateImage  ... {
       
    
// ===源图片路径名称如:c:\1.jpg 
     private  String srcpath ;
         
    
// ===剪切图片存放路径名称.如:c:\2.jpg
     private  String subpath ;
    
    
// ===剪切点x坐标
     private   int  x ;
    
    
private   int  y ;    
      
    
// ===剪切点宽度
     private   int  width ;
     
    
private   int  height ;
    
    
public  OperateImage() ... {
            
    }
  
    
public  OperateImage( int  x, int  y, int  width, int  height) ... {
         
this .x  =  x ;
         
this .y  =  y ;
         
this .width  =  width ;   
         
this .height  =  height ;
    }

    
    
/** */ /**  
     * 对图片裁剪,并把裁剪完蛋新图片保存 。
     
*/

    
public   void  cut()  throws  IOException ...
         
        FileInputStream is 
=   null  ;
        ImageInputStream iis 
= null  ;
     
        
try ... {   
            
// 读取图片文件
            is  =   new  FileInputStream(srcpath); 
            
            
/**/ /*
             * 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 
             * 声称能够解码指定格式。 参数:formatName - 包含非正式格式名称 .
             *(例如 "jpeg" 或 "tiff")等 。 
             
*/

            Iterator
< ImageReader >  it  =  ImageIO.getImageReadersByFormatName( " jpg " );  
            ImageReader reader 
=  it.next(); 
            
// 获取图片流 
            iis  =  ImageIO.createImageInputStream(is);
               
            
/**/ /*  
             * <p>iis:读取源.true:只向前搜索 </p>.将它标记为 ‘只向前搜索’。
             * 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader
             *  避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。
             
*/

            reader.setInput(iis,
true ) ;
            
            
/**/ /*  
             * <p>描述如何对流进行解码的类<p>.用于指定如何在输入时从 Java Image I/O 
             * 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件
             * 将从其 ImageReader 实现的 getDefaultReadParam 方法中返回 
             * ImageReadParam 的实例。  
             
*/

            ImageReadParam param 
=  reader.getDefaultReadParam(); 
             
            
/**/ /*
             * 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象
             * 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。 
             
*/
 
            Rectangle rect 
=   new  Rectangle(x, y, width, height); 
            
              
            
// 提供一个 BufferedImage,将其用作解码像素数据的目标。 
            param.setSourceRegion(rect); 

            
/**/ /*
             * 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将
             * 它作为一个完整的 BufferedImage 返回。
             
*/

            BufferedImage bi 
=  reader.read( 0 ,param);                
      
            
// 保存新图片 
            ImageIO.write(bi,  " jpg " new  File(subpath));     
        }

        
        
finally ... {
            
if (is != null )
               is.close() ;       
            
if (iis != null )
               iis.close();  
        }
 
        
         
     
    }


    
public   int  getHeight()  ... {
        
return  height;
    }


    
public   void  setHeight( int  height)  ... {
        
this .height  =  height;
    }


    
public  String getSrcpath()  ... {
        
return  srcpath;
    }


    
public   void  setSrcpath(String srcpath)  ... {
        
this .srcpath  =  srcpath;
    }


    
public  String getSubpath()  ... {
        
return  subpath;
    }


    
public   void  setSubpath(String subpath)  ... {
        
this .subpath  =  subpath;
    }


    
public   int  getWidth()  ... {
        
return  width;
    }


    
public   void  setWidth( int  width)  ... {
        
this .width  =  width;
    }


    
public   int  getX()  ... {
        
return  x;
    }


    
public   void  setX( int  x)  ... {
        
this .x  =  x;
    }


    
public   int  getY()  ... {
        
return  y;
    }


    
public   void  setY( int  y)  ... {
        
this .y  =  y;
    }
 
    
public   static   void  main(String[] args) throws  Exception ... {
        
        String name 
=   " d:\2005121210161588950.jpg "
        
        OperateImage o 
=   new  OperateImage( 100 , 100 , 100 , 100 );
        o.setSrcpath(name);  
        o.setSubpath(
" D:\2.jpg " );
        o.cut() ;  
          
    }



}

分享到:
评论

相关推荐

    java图片裁剪

    本文将深入探讨Java图片裁剪的相关知识点。 一、图片裁剪原理 图片裁剪是指在原始图像上选择一个矩形区域,并保留该区域内的像素,舍弃其他部分。在Java中,我们通常会用到BufferedImage类,它代表了一个图像,包含...

    java图片等比压缩后裁剪

    总结起来,Java图片等比压缩和裁剪涉及读取图片、计算比例、缩放、裁剪和保存等多个步骤,需要理解图像处理的基本原理,并利用适当的库来实现。这个过程中需要注意保持图像质量,避免失真,并确保符合预期的输出尺寸...

    java裁剪、缩放图片工具类

    这个"java裁剪、缩放图片工具类"提供了这样的功能。它包含两个主要的组件:一个工具类(ImgUtils.java)和一个测试类(Test.java)。让我们深入探讨这两个类及其背后的图像处理原理。 首先,`ImgUtils.java`是核心...

    croppic图片裁剪java后台处理

    看很多裁剪图片的插件感觉都不是自己想要的,后来也是网上别人说croppic可以满足,结果发现是PHP的插件,而且网络上完全没有java版本的一丁点痕迹,我觉得数据都是一样的传,那应该就是参数的问题了,所以花了点时间...

    java 图片上传,可预览可剪切可缩放

    在Java开发中,图片上传、预览、剪切和缩放是常见的功能需求,尤其在Web应用中。这里,我们主要探讨如何实现这些功能,并基于`swfupload`这个库来构建一个完整的解决方案。 首先,`swfupload`是一个古老的Flash上传...

    android图片裁剪上传

    首先,我们要了解图片裁剪的基本原理。Android系统提供了一个名为`com.android.camera.action.CROP`的Intent,用于启动系统内置的图片裁剪功能。开发者可以创建一个Intent,指定源图片Uri和裁剪参数(如裁剪比例、...

    Jquery+java图片切割 滤镜功能

    文件列表中的“Jquery+JAVA图片切割上传”可能包含以下部分: 1. 前端HTML和Jquery代码,用于用户界面展示、图片选择和提交。 2. JavaScript文件,包含Jquery实现的图片切割和滤镜功能的逻辑。 3. Java源代码,包括...

    java图片处理类-java课程设计

    Java图片处理类是Java编程语言中用于操作和处理图像文件的核心技术,主要涉及Java的AWT(Abstract Window Toolkit)和Swing库。在Java课程设计中,学生通常会被要求掌握这些概念并应用到实际项目中,例如创建一个...

    java图片编辑软件

    总结来说,"Java图片编辑软件"通过Java编程语言实现了图片压缩功能,这涉及到图像处理的基本原理、压缩算法以及Java库的使用。了解并掌握这些知识,有助于开发者构建自己的图像处理应用,满足各种需求。

    java图片放大与缩小

    本文将深入探讨如何使用Java来实现图片的指定放大或缩小,并提供一个具体的代码示例,该示例来自“common.util”包下的`AlterUploadImage`类,这是一个专门用于处理图片缩放和裁剪的工具类。 #### 图像缩放原理 ...

    javapng透明图片缩略

    在Java编程中,生成PNG透明...总之,生成PNG透明图片缩略图在Java中涉及到图像处理的基本原理和高级技巧,选择合适的库和算法至关重要。同时,要注意透明度的正确处理和代码的优化,以确保缩略图的质量和程序的性能。

    Android代码-图片裁剪代码精简.rar

    下面,我们将深入探讨Android中图片裁剪的实现原理、相关API以及如何优化代码。 在Android中,图片裁剪通常通过Intent来实现,Android系统内置了`ACTION_IMAGE_CAPTURE`和`ACTION_GET_CONTENT`这两个Intent,可以...

    jcrop + jquery+struts2 图片裁剪

    "jcrop + jquery + struts2 图片裁剪"的组合提供了一种强大的解决方案,它整合了三个关键的技术来实现用户友好的图像裁剪功能。 首先,Jcrop是jQuery的一个插件,专门用于图像的选择和裁剪。它允许用户通过鼠标或...

    Android图片裁剪

    本篇文章将深入探讨Android图片裁剪的原理、实现方式以及`CropImageView`的使用方法。 首先,Android系统本身提供了`Bitmap.createBitmap()`方法,可以对原始Bitmap进行裁剪,但此方法无法提供直观的裁剪界面和交互...

    java版图片压缩方法

    #### Java图片压缩代码解析 给定的代码示例主要展示了如何使用Java进行图片的无损压缩处理。具体步骤如下: 1. **读取源图像**:首先,通过`ImageIO.read()`方法读取源图片文件到`Image`对象中。 2. **缩放图像**...

    android 图片裁剪

    接下来,我们将深入探讨Android图片裁剪的基本原理、实现方法以及可能用到的关键技术。 1. **Intent集成系统裁剪**: Android系统提供了`Intent`来调用内置的图片裁剪工具。通过`ACTION_PICK` Intent获取图片,再...

    Java图片压缩

    下面我们将深入探讨Java图片压缩的相关知识点。 1. **图片格式** 图片格式有很多种,如JPEG、PNG、GIF、BMP等。不同的格式有不同的压缩算法和用途。JPEG适用于连续色调的图片,如照片,支持有损压缩;PNG适合于...

    图片上传带裁剪

    要实现图片裁剪,我们可以引入如JQuery Cropper这样的插件。JQuery Cropper是一个轻量级且功能丰富的jQuery插件,支持基于HTML5的Canvas进行图片裁剪。在页面上,用户可以通过拖动和调整裁剪框来选择需要的部分,...

    java,OpenCV简单实现类似“全能扫描王”功能

    4. **裁剪与边缘检测**:根据图像内容,可能需要进行裁剪,去除多余的背景。同时,可以使用Canny边缘检测或其他边缘检测算法,找到文档的边缘,进一步提高扫描效果。 5. **噪声去除**:使用滤波器(如高斯滤波器)...

    java封装ffmpeg截取视频图片

    首先,我们要了解Java封装FFmpeg的基本原理。通常,这涉及到使用JNI(Java Native Interface)或JNA(Java Native Access)来调用FFmpeg的C/C++库。这样,Java代码可以调用FFmpeg的函数,执行多媒体操作,而无需离开...

Global site tag (gtag.js) - Google Analytics