「java智能裁剪」智能对象怎么裁剪

博主:adminadmin 2023-01-03 16:54:11 837

今天给各位分享java智能裁剪的知识,其中也会对智能对象怎么裁剪进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

怎样使用java编程实现文件的剪切/移动

可以通过BufferedReader

流的形式进行流读取,之后通过readLine方法获取到的内容,之后通过if判断来实现在某些特定位置的内容的剪切和移动操作。

举例:

BufferedReader

bre

=

null;

OutputStreamWriter

pw

=

null;//定义一个流

try

{

String

file

=

"D:/test/test.txt";

bre

=

new

BufferedReader(new

FileReader(file));//此时获取到的bre就是整个文件的缓存流

pw

=

new

OutputStreamWriter(new

FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例

while

((str

=

bre.readLine())!=

null)

//

判断最后一行不存在,为空结束循环

{

if(str.indexOf("排除")0){//判断是否需要舍弃

pw.write(str);//将要写入文件的内容,可以多次write

}

}

bre.close();//关闭流

pw.close();//关闭流

解释:以上方法是实现的删除,if中的条件改变下,即可实现其余的功能。

备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。

您好!请问用java怎么将截取png的图片中间一部分,以及如何压缩一个png图片?

getSubimage方法是进行图片裁剪。

举例:

public static void main(String[] args) {

try {

//从特定文件载入

BufferedImage bi = ImageIO.read(new File("c:\\test.png"));

bi.getSubimage(0, 0, 10, 10);//前两个值是坐标位置X、Y,后两个是长和宽

} catch (IOException e) {

e.printStackTrace();

}

}

以下是进行的图片压缩,涉及到多个工具类。

/**

* 图片工具类

* 压缩图片大小

* @author Cyw

* @version 1.0

*/

public class ZIPImage {

private File file = null;

private String outPutFilePath;

private String inPutFilePath;

private String inPutFileName;

private boolean autoBuildFileName;

private String outPutFileName;

private int outPutFileWidth = 100; // 默认输出图片宽

private int outPutFileHeight = 100; // 默认输出图片高

private static boolean isScaleZoom = true; // 是否按比例缩放

public ZIPImage() {

outPutFilePath = "";

inPutFilePath = "";

inPutFileName = "";

autoBuildFileName = true;

outPutFileName = "";

}

/**

* @param ipfp

* 源文件夹路径

* @param ipfn

* 源文件名

* @param opfp

* 目标文件路径

* @param opfn

* 目标文件名

*/

public ZIPImage(String ipfp, String ipfn, String opfp, String opfn) {

outPutFilePath = opfp;

inPutFilePath = ipfp;

inPutFileName = ipfn;

autoBuildFileName = true;

outPutFileName = opfn;

}

/**

* @param ipfp

* 源文件夹路径

* @param ipfn

* 源文件名

* @param opfp

* 目标文件路径

* @param opfn

* 目标文件名

* @param aBFN

* 是否自动生成目标文件名

*/

public ZIPImage(String ipfp, String ipfn, String opfp, String opfn,

boolean aBFN) {

outPutFilePath = opfp;

inPutFilePath = ipfp;

inPutFileName = ipfn;

autoBuildFileName = aBFN;

outPutFileName = opfn;

}

public boolean isAutoBuildFileName() {

return autoBuildFileName;

}

public void setAutoBuildFileName(boolean autoBuildFileName) {

this.autoBuildFileName = autoBuildFileName;

}

public String getInPutFilePath() {

return inPutFilePath;

}

public void setInPutFilePath(String inPutFilePath) {

this.inPutFilePath = inPutFilePath;

}

public String getOutPutFileName() {

return outPutFileName;

}

public void setOutPutFileName(String outPutFileName) {

this.outPutFileName = outPutFileName;

}

public String getOutPutFilePath() {

return outPutFilePath;

}

public void setOutPutFilePath(String outPutFilePath) {

this.outPutFilePath = outPutFilePath;

}

public int getOutPutFileHeight() {

return outPutFileHeight;

}

public void setOutPutFileHeight(int outPutFileHeight) {

this.outPutFileHeight = outPutFileHeight;

}

public int getOutPutFileWidth() {

return outPutFileWidth;

}

public void setOutPutFileWidth(int outPutFileWidth) {

this.outPutFileWidth = outPutFileWidth;

}

public boolean isScaleZoom() {

return isScaleZoom;

}

public void setScaleZoom(boolean isScaleZoom) {

this.isScaleZoom = isScaleZoom;

}

public String getInPutFileName() {

return inPutFileName;

}

public void setInPutFileName(String inPutFileName) {

this.inPutFileName = inPutFileName;

}

/**

* 压缩图片大小

* @return boolean

*/

public boolean compressImage() {

boolean flag = false;

try {

if (inPutFilePath.trim().equals("")) {

throw new NullPointerException("源文件夹路径不存在。");

}

if (inPutFileName.trim().equals("")) {

throw new NullPointerException("图片文件路径不存在。");

}

if (outPutFilePath.trim().equals("")) {

throw new NullPointerException("目标文件夹路径地址为空。");

} else {

if (!ZIPImage.mddir(outPutFilePath)) {

throw new FileNotFoundException(outPutFilePath

+ " 文件夹创建失败!");

}

}

if (this.autoBuildFileName) { // 自动生成文件名

String tempFile[] = getFileNameAndExtName(inPutFileName);

outPutFileName = tempFile[0] + "_cyw." + tempFile[1];

compressPic();

} else {

if (outPutFileName.trim().equals("")) {

throw new NullPointerException("目标文件名为空。");

}

compressPic();

}

} catch (Exception e) {

flag = false;

e.printStackTrace();

return flag;

}

return flag;

}

// 图片处理

private void compressPic() throws Exception {

try {

// 获得源文件

file = new File(inPutFilePath + inPutFileName);

if (!file.exists()) {

throw new FileNotFoundException(inPutFilePath + inPutFileName

+ " 文件不存在!");

}

Image img = ImageIO.read(file);

// 判断图片格式是否正确

if (img.getWidth(null) == -1) {

throw new Exception("文件不可读!");

} else {

int newWidth;

int newHeight;

// 判断是否是等比缩放

if (ZIPImage.isScaleZoom == true) {

// 为等比缩放计算输出的图片宽度及高度

double rate1 = ((double) img.getWidth(null))

/ (double) outPutFileWidth + 0.1;

double rate2 = ((double) img.getHeight(null))

/ (double) outPutFileHeight + 0.1;

// 根据缩放比率大的进行缩放控制

double rate = rate1 rate2 ? rate1 : rate2;

newWidth = (int) (((double) img.getWidth(null)) / rate);

newHeight = (int) (((double) img.getHeight(null)) / rate);

} else {

newWidth = outPutFileWidth; // 输出的图片宽度

newHeight = outPutFileHeight; // 输出的图片高度

}

BufferedImage tag = new BufferedImage((int) newWidth,

(int) newHeight, BufferedImage.TYPE_INT_RGB);

/*

* Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢

*/

tag.getGraphics().drawImage(

img.getScaledInstance(newWidth, newHeight,

Image.SCALE_SMOOTH), 0, 0, null);

FileOutputStream out = new FileOutputStream(outPutFilePath

+ outPutFileName);

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

encoder.encode(tag);

out.close();

}

} catch (IOException ex) {

ex.printStackTrace();

}

}

/**

* 创建文件夹目录

* @param filePath

* @return

* @throws Exception

*/

@SuppressWarnings("unused")

private static boolean mddir(String filePath) throws Exception {

boolean flag = false;

File f = new File(filePath);

if (!f.exists()) {

flag = f.mkdirs();

} else {

flag = true;

}

return flag;

}

/**

* 获得文件名和扩展名

* @param fullFileName

* @return

* @throws Exception

*/

private String[] getFileNameAndExtName(String fullFileName)

throws Exception {

String[] fileNames = new String[2];

if (fullFileName.indexOf(".") == -1) {

throw new Exception("源文件名不正确!");

} else {

fileNames[0] = fullFileName.substring(0, fullFileName

.lastIndexOf("."));

fileNames[1] = fullFileName

.substring(fullFileName.lastIndexOf(".") + 1);

}

return fileNames;

}

public Image getSourceImage() throws IOException{

//获得源文件

file = new File(inPutFilePath + inPutFileName);

if (!file.exists()) {

throw new FileNotFoundException(inPutFilePath + inPutFileName

+ " 文件不存在!");

}

Image img = ImageIO.read(file);

return img;

}

/*

* 获得图片大小 

* @path :图片路径

*/

public long getPicSize(String path) {

File file = new File(path);

return file.length();

}

}

//下面是测试程序

package com.sun.util.cyw;

import java.awt.Image;

import java.io.IOException;

public class ImageTest {

public static void main(String[] args) throws IOException {

ZIPImage zip=new ZIPImage("d:\\","1.jpg","d:\\test\\","处理后的图片.jpg",false);

zip.setOutPutFileWidth(1000);

zip.setOutPutFileHeight(1000);

Image image=zip.getSourceImage();

long size=zip.getPicSize("d:\\1.jpg");

System.out.println("处理前的图片大小 width:"+image.getWidth(null));

System.out.println("处理前的图片大小 height:"+image.getHeight(null));

System.out.println("处理前的图片容量:"+ size +" bit");

zip.compressImage();

}

}

java裁剪gif图片

不知楼主解决了没有,我最近也在研究这个问题,基本上已经解决,我试过用php、python、java去解决这个问题,都成功了,当然在java上的效果是最好的,我的程序能够将gif,当然不仅仅是gif,图片进行裁剪和缩放,结果还是动态的。具体细节,这里说不清楚,离你提问也一年多了。我可不想在这里说,如果楼主要有需要再回我,建议去专业的技术论坛提问。

java图片裁剪原理

总体思想

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

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

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

java 代码

package 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;

/**

*

*

*

*/

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 包含非正式格式名称

*(例如 jpeg 或 tiff )等

*/

Iterator ImageReader it = ImageIO getImageReadersByFormatName( jpg )

ImageReader reader = it next()

// 获取图片流

iis = ImageIO createImageInputStream(is)

/*

* piis:读取源 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( 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:\ jpg ;

OperateImage o = new OperateImage( )

o setSrcpath(name)

o setSubpath( D:\ jpg )

o cut() ;

}

lishixinzhi/Article/program/Java/hx/201311/26771

java怎么剪裁图片

BufferedImage类有一个getSubimage()方法,以下来自API

public BufferedImage getSubimage(int x,

int y,

int w,

int h)

返回由指定矩形区域定义的子图像。返回的 BufferedImage 与源图像共享相同的数据数组。

参数:

x - 指定矩形区域左上角的 X 坐标

y - 指定矩形区域左上角的 Y 坐标

w - 指定矩形区域的宽度

h - 指定矩形区域的高度

返回:

BufferedImage,它是此 BufferedImage 的子图像。

抛出:

RasterFormatException - 如果指定区域不包含在此 BufferedImage 中。

java智能裁剪的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于智能对象怎么裁剪、java智能裁剪的信息别忘了在本站进行查找喔。