`

java图片裁剪原理

    博客分类:
  • java
阅读更多
原文地址:http://blog.csdn.net/lql876381722/archive/2008/03/21/2203512.aspx

总体思想:

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图像二值化,去白边实现紧包效果

    首先,我们需要理解二值化的原理。在灰度图像中,每个像素点的值介于0(黑色)到255(白色)之间。二值化就是设定一个阈值,小于阈值的像素点设为0(黑色),大于等于阈值的设为255(白色)。这样,图像就被转化成了...

    java封装ffmpeg截取视频图片

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

Global site tag (gtag.js) - Google Analytics