Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35772
  • 博文数量: 24
  • 博客积分: 1002
  • 博客等级: 准尉
  • 技术积分: 592
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-18 11:11
文章分类

全部博文(24)

文章存档

2013年(6)

2012年(18)

我的朋友

分类:

2012-06-20 09:49:29

原文地址:java图片裁剪原理 作者:xujun1206

原文地址:http://blog.csdn.net/lql876381722/archive/2008/03/21/2203512.aspx

总体思想:

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

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

3.根据这些参数来生成裁剪的图像。 后台代码如下:

java 代码

  1. package com.wodexiangce;

  2. import java.awt.Rectangle;
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.IOException;
  7. import java.util.Iterator;

  8.  import javax.imageio.ImageIO;
  9.  import javax.imageio.ImageReadParam;
  10.  import javax.imageio.ImageReader;
  11.  import javax.imageio.stream.ImageInputStream;

  12. /**
  13.  *


  14.  *
  15.  * 2008-3-21
  16.   */
  17. public class OperateImage {
  18.           
  19.      // ===源图片路径名称如:c:\1.jpg

  20.      private String srcpath ;
  21.             
  22.      // ===剪切图片存放路径名称.如:c:\2.jpg

  23.      private String subpath ;
  24.        
  25.      // ===剪切点x坐标

  26.      private int x ;
  27.        
  28.      private int y ;
  29.          
  30.      // ===剪切点宽度

  31.      private int width ;
  32.         
  33.      private int height ;
  34.        
  35.      public OperateImage() {
  36.                
  37.     }
  38.      public OperateImage( int x, int y, int width, int height) {
  39.           this .x = x ;
  40.           this .y = y ;
  41.           this .width = width ;
  42.           this .height = height ;
  43.     }
  44.        
  45.   /**
  46.      * 对图片裁剪,并把裁剪完蛋新图片保存 。
  47.    */
  48.      public void cut() throws IOException {
  49.             
  50.         FileInputStream is = null ;
  51.         ImageInputStream iis = null ;
  52.         
  53.          try {
  54.              // 读取图片文件

  55.             is = new FileInputStream(srcpath);
  56.                
  57.             /*
  58.              * 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader
  59.              * 声称能够解码指定格式。 参数:formatName - 包含非正式格式名称 .
  60.              *(例如 "jpeg" 或 "tiff")等 。
  61.          */
  62.             Iterator < ImageReader > it = ImageIO.getImageReadersByFormatName( " jpg " );
  63.             ImageReader reader = it.next();
  64.              // 获取图片流

  65.             iis = ImageIO.createImageInputStream(is);
  66.                   
  67.             /*
  68.              *

    iis:读取源.true:只向前搜索

    .将它标记为 ‘只向前搜索’。
  69.              * 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader
  70.              * 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。
  71.          */
  72.             reader.setInput(iis, true ) ;
  73.                
  74.             /*
  75.              *

    描述如何对流进行解码的类

    .用于指定如何在输入时从 Java Image I/O

  76.              * 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件
  77.              * 将从其 ImageReader 实现的 getDefaultReadParam 方法中返回
  78.              * ImageReadParam 的实例。
  79.         */
  80.             ImageReadParam param = reader.getDefaultReadParam();
  81.                 
  82.             /*
  83.              * 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象
  84.              * 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。
  85.         */
  86.             Rectangle rect = new Rectangle(x, y, width, height);
  87.                
  88.                  
  89.              // 提供一个 BufferedImage,将其用作解码像素数据的目标。

  90.             param.setSourceRegion(rect);

  91.             /*
  92.              * 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将
  93.              * 它作为一个完整的 BufferedImage 返回。
  94.                */
  95.              BufferedImage bi = reader.read( 0 ,param);
  96.           
  97.               // 保存新图片

  98.              ImageIO.write(bi, " jpg " , new File(subpath));
  99.          } finally {
  100.               if (is != null )
  101.                 is.close() ;
  102.               if (iis != null )
  103.                 iis.close();
  104.          }
  105.             
  106.              
  107.          
  108.      }
  109.   
  110.       public int getHeight() {
  111.           return height;
  112.      }
  113.   
  114.       public void setHeight( int height) {
  115.           this .height = height;
  116.      }
  117.   
  118.       public String getSrcpath() {
  119.           return srcpath;
  120.      }
  121.   
  122.       public void setSrcpath(String srcpath) {
  123.           this .srcpath = srcpath;
  124.      }
  125.   
  126.       public String getSubpath() {
  127.           return subpath;
  128.      }
  129.   
  130.       public void setSubpath(String subpath) {
  131.           this .subpath = subpath;
  132.      }
  133.   
  134.       public int getWidth() {
  135.           return width;
  136.      }
  137.   
  138.       public void setWidth( int width) {
  139.           this .width = width;
  140.      }
  141.   
  142.       public int getX() {
  143.           return x;
  144.      }
  145.   
  146.       public void setX( int x) {
  147.           this .x = x;
  148.      }
  149.   
  150.       public int getY() {
  151.           return y;
  152.      }
  153.   
  154.       public void setY( int y) {
  155.           this .y = y;
  156.      }
  157.       public static void main(String[] args) throws Exception {
  158.             
  159.          String name = " d:\2005121210161588950.jpg " ;
  160.             
  161.          OperateImage o = new OperateImage( 100 , 100 , 100 , 100 );
  162.          o.setSrcpath(name);
  163.          o.setSubpath( " D:\2.jpg " );
  164.          o.cut() ;
  165.               
  166.      }
  167.   
  168.   
  169.  }


 

阅读(210) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:端午节民俗游――秭归

给主人留下些什么吧!~~