java

位置:IT落伍者 >> java >> 浏览文章

java图片裁剪原理


发布日期:2024年07月22日
 
java图片裁剪原理

总体思想

前台网页用js得到裁剪图片的id及xy宽度和高度

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

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

java 代码

package comwodexiangce;

import javaawtRectangle;

import javaawtimageBufferedImage;

import javaioFile;

import javaioFileInputStream;

import javaioIOException;

import javautilIterator;

import javaximageioImageIO;

import javaximageioImageReadParam;

import javaximageioImageReader;

import javaximageiostreamImageInputStream;

/**

*

*

*

*/

public class OperateImage {

// ===源图片路径名称如c:\jpg

private String srcpath ;

// ===剪切图片存放路径名称c:\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 包含非正式格式名称

*(例如 jpegtiff)等

*/

Iterator < ImageReader > it = ImageIOgetImageReadersByFormatName( jpg

ImageReader reader = itnext()

// 获取图片流

iis = ImageIOcreateImageInputStream(is)

/*

* <p>iis:读取源true:只向前搜索 </p>将它标记为 只向前搜索

* 此设置意味着包含在输入源中的图像将只按顺序读取可能允许 reader

* 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分

*/

readersetInput(iis true ) ;

/*

* <p>描述如何对流进行解码的类<p>用于指定如何在输入时从 Java Image I/O

* 框架的上下文中的流转换一幅图像或一组图像用于特定图像格式的插件

* 将从其 ImageReader 实现的 getDefaultReadParam 方法中返回

* ImageReadParam 的实例

*/

ImageReadParam param = readergetDefaultReadParam()

/*

* 图片裁剪区域Rectangle 指定了坐标空间中的一个区域通过 Rectangle 对象

* 的左上顶点的坐标(xy)宽度和高度可以定义这个区域

*/

Rectangle rect = new Rectangle(x y width height)

// 提供一个 BufferedImage将其用作解码像素数据的目标

paramsetSourceRegion(rect)

/*

* 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象并将

* 它作为一个完整的 BufferedImage 返回

*/

BufferedImage bi = readerread( param)

// 保存新图片

ImageIOwrite(bi jpg new File(subpath))

} finally {

if (is != null )

isclose() ;

if (iis != null )

iisclose()

}

}

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:\jpg ;

OperateImage o = new OperateImage(

osetSrcpath(name)

osetSubpath( D:\jpg

ocut() ;

}

}

               

上一篇:java操作将内容写入文件

下一篇:使用Java实现Comet风格的Web应用(一)