1.等比例缩小或放大图片
/**
* Create time May 31, 2009 4:33:31 PM
*/
package com.yd.image;
import java.awt.Canvas;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.AreaAveragingScaleFilter;
import java.awt.image.BufferedImage;
import java.awt.image.FilteredImageSource;
import java.io.File;
import javax.imageio.ImageIO;
/**
* <p>Title: ZoomImage</p>
* <p>Description: </p>
*
* @author Yaodi
* @version 1.0
*/
public class ZoomImage {
private static Component component = new Canvas();
private static String[] imageFormatArray = new String[] { ".jpg", ".jpeg", ".gif", ".png", ".bmp" };//pcx/tga/tif这三种格式目前还不支持
/**
* 校验图像文件的格式是否可以进行缩放
*/
public boolean verifyImageFormat(String fileName) {
boolean result = false;
for (int i = 0; i < imageFormatArray.length; i++) {
if (fileName.toLowerCase().lastIndexOf(imageFormatArray[i]) == (fileName
.length() - imageFormatArray[i].length())) {
result = true;
break;
}
}
return result;
}
/**
* 将目录下的所有图像进行放大缩小
*
* @param strDir 图像的目录
* @param zoomRatio 放大缩小的倍率
* @param rebuild 是否重新创建,即已经存在的图像是否覆盖重建
* @throws Exception
*/
public void zoom(String strDir, double zoomRatio, boolean rebuild)
throws Exception {
File fileDir = new File(strDir);
if (!fileDir.exists()) {
return;
}
String dirTarget = strDir + "/small" + zoomRatio;
File fileTarget = new File(dirTarget);
if (!fileTarget.exists()) {
fileTarget.mkdir();
}
File[] files = fileDir.listFiles();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < files.length; i++) {
String fileFullName = files[i].getCanonicalPath();
String fileShortName = files[i].getName();
if (!new File(fileFullName).isDirectory())// 排除二级目录,如果想就再递归一次,这里省略
{
if (verifyImageFormat(fileShortName)) {
stringBuilder = new StringBuilder();
stringBuilder.append(dirTarget).append("/").append(
fileShortName);
if (!new File(stringBuilder.toString()).exists() || rebuild) {
try {
createZoomSizeImage(fileFullName, stringBuilder
.toString(), zoomRatio);
} catch (Exception e) {
}
}
}
}
}
}
/**
* 按比例进行放大或缩小图像,zoomRatio = 1为原大,zoomRatio > 1为放大,zoomRatio < 1 为缩小
*/
public void createZoomSizeImage(String fileName, String fileNameTarget,
double zoomRatio) throws Exception {
Image image = ImageIO.read(new File(fileName));
int width = new Double(image.getWidth(null) * zoomRatio).intValue();
int height = new Double(image.getHeight(null) * zoomRatio).intValue();
AreaAveragingScaleFilter areaAveragingScaleFilter = new AreaAveragingScaleFilter(
width, height);
FilteredImageSource filteredImageSource = new FilteredImageSource(image
.getSource(), areaAveragingScaleFilter);
BufferedImage bufferedImage = new BufferedImage(width, height,
BufferedImage.TYPE_3BYTE_BGR);
Graphics graphics = bufferedImage.createGraphics();
graphics.drawImage(component.createImage(filteredImageSource), 0, 0,
null);
ImageIO.write(bufferedImage, "JPEG", new File(fileNameTarget));
}
public static void main(String[] args) throws Exception {
ZoomImage zoomImage = new ZoomImage();
zoomImage.zoom("F:/pic", 0.25, false);// 缩小2倍
//zoomImage.zoom("F:/pic",2,true);// 放大2倍
System.out.println("************THEEND************");
}
}
2.按坐标裁切图片
/**
* Create time May 31, 2009 4:33:31 PM
*/
package com.yd.image;
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;
/**
* <p>Title: CutImage</p>
* <p>Description: </p>
*
* @author Yaodi
* @version 1.0
*/
public class CutImage {
private static int x_share = 8; //x切片份数
private static int y_share = 10; //y切片份数
private static String srcpath = "F:/pic/xiaohei.jpg"; //源图片路径名称
private static String subpath = "F:/pic/cut/"; //剪切图片存放的目录
private int x; //剪切点x坐标
private int y; //剪切点y坐标
private int width; //剪切点宽度
private int height; //剪切点高度
private int num;
public CutImage() { }
public CutImage(int x, int y, int width, int height, int num) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.num = num;
}
/**
* 对图片裁剪,并把裁剪完的新图片保存
*/
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);
/**
* iis:读取源.true:只向前搜索.将它标记为 ‘只向前搜索’。 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许
* 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 + num + ".jpg"));
} finally {
if (is != null)
is.close();
if (iis != null)
iis.close();
}
}
public static void main(String[] args) throws IOException {
BufferedImage bufferedImage = ImageIO.read(new File(srcpath));
File file = new File(subpath); //创建切片存放的目录
file.mkdirs();
int init_width = bufferedImage.getWidth(); //获得原始图片的宽
int init_height = bufferedImage.getHeight(); //获得原始图片的高
int x = 0; //x坐标点
int y = 0; //y坐标点
int width = init_width / x_share; //裁切后图片的宽
int height = init_height / y_share; //裁切后图片的高
int sum = (init_width / width) * (init_height / height); //获得切片的总数
for (int i = 1; i <= sum; i++) {
if (x == init_width) {
x = 0;
y = y + height; //y坐标移动
}
CutImage ci = new CutImage(x, y, width, height, i);
x = x + width; //x坐标移动
try {
ci.cut();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("************THEEND************");
}
}
图片宽和高必须要被切片份数整除
3.判断图片是否相同
/**
* Create time May 31, 2009 4:33:31 PM
*/
package com.yd.image;
import java.io.File;
import java.security.MessageDigest;
/**
* <p>Title: MD5Image</p>
* <p>Description: </p>
*
* @author Yaodi
* @version 1.0
*/
public class MD5Image {
/**
* MD5加密的方式判断图片是否相同
*/
public static String MD5(byte[] s) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };//16进制字符
try {
byte[] strTemp = s;
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[] md = mdTemp.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;//移位 输出字符串
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
return null;
}
}
public static void main(String[] args) {
//44f24b510805d6c8ed2aec46817ebb5e
File file = new File("F:/pic/xiaohei.jpg");
byte[] b = new byte[(int) file.length()];
System.out.println(MD5Image.MD5(b));
}
}
通过生成的MD5码,进行判断筛选出文件夹中相同的图片
分享到:
相关推荐
在Java编程语言中,图像处理是一项重要的功能,可以用于创建、编辑或操作图像。本教程将探讨两个关键的图像处理技术:模糊处理和锐化处理。这些技术在图像分析、图像增强以及艺术创作中有着广泛的应用。 模糊处理是...
java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 ...
示例代码展示了如何使用Java的图像处理库来对图像进行灰度化处理。在代码中,我们使用javax.imageio.ImageIO类加载输入图像文件,并创建一个与输入图像具有相同尺寸和类型的输出图像。然后,我们遍历输入图像的每个...
### Java处理上传后的图片知识点详解 #### 一、图片上传及处理概述 在现代Web应用中,用户上传图片的功能十分常见。为了优化用户体验并减轻服务器存储压力,通常会在图片上传后进行一系列处理,如压缩、缩放等。...
在压缩包中的"java图片大小转换"文件中,很可能包含了实现这些功能的示例代码和使用说明,可以参考学习以加深理解。在实际开发中,我们还可以借助第三方库如`ImageMagick`、`Java Advanced Imaging (JAI)`或`JavaFX`...
基于 Java 平台的图像处理软件的设计与实现 本资源旨在设计和实现基于 Java 平台的图像处理软件,该软件能够实现基本的图像处理功能,如图像的放大、缩小、锐化等。该软件的设计基于 Java 语言,充分发挥了 Java ...
Java 图像处理 Java 图像处理是使用 Java 语言对图像进行处理和操作的技术。该技术广泛应用于图像编辑、图像识别、计算机视觉等领域。 在 Java 中,对图像的处理可以通过使用 Java 2D API、Java Advanced Imaging...
Java图片处理工具ImageMagick是一个强大的跨平台图形处理库,它允许开发人员在Java应用程序中进行复杂的图像操作,包括但不限于转换、编辑、合成图像以及处理大量格式的图像文件。ImageMagick是由C语言编写的,但...
总的来说,这个项目展示了如何利用Java进行曲线和直线拟合,涉及到的知识点包括:Java编程基础、数值分析中的最小二乘法、多项式拟合、线性代数中的矩阵运算以及相关的第三方库的使用。对于学习和理解这些概念,这个...
总的来说,Java图片高级处理涉及多个层次的技术,从简单的颜色变换到复杂的数学算法,都需要扎实的编程基础和对图像处理原理的理解。通过学习和实践,你可以创建出具有独特视觉效果的应用程序或工具,满足各种图像...
在Java编程语言中,处理图像是一项常见的任务,包括图片的旋转、翻转和镜像操作。这些功能在很多场景下都很实用,例如照片编辑、图像处理应用或是网页开发。本篇将详细介绍如何使用Java实现这些功能,并以`ImgRotate...
### 谈Java图像处理技术 #### Java 2D中的图像处理模型 Java 2D是一种用于绘制图形、处理图像的技术框架,它为开发者提供了一系列高级API,使得图像处理变得更加简单高效。Java 2D中的图像处理模型主要采用即时...
Java图形与图像处理是Java程序设计的一个重要领域,主要涉及如何在Java环境中创建和操作图形以及处理图像。在Java中,我们通常使用`java.awt`和`java.awt.image`这两个包来实现图形与图像的处理。 标题中的"java...
本项目是基于Java实现的图像分割算法,涉及到的知识点广泛,包括全局阈值分割、Roberts边缘检测以及灰度图像处理和直方图分析。 1. **全局阈值分割**: 全局阈值分割是一种简单的二值化方法,它通过设定一个全局...
JAVA处理图片 加文字水印以及灰色透明背景,处理图片。
在图像识别与处理领域,Java作为一种跨平台的编程语言,提供了强大的工具和库来支持开发者进行复杂的图像操作。本资源“图像识别与处理Java代码.rar”包含了一个Java项目,主要涉及了图像处理和图像识别的基本概念和...
在Java编程语言中,处理图片是一项常见的任务,可以包括添加水印、缩放、裁剪等操作。在提供的代码段中,我们看到一个名为`ImageUtils`的类,该类包含两个方法,分别用于实现图片水印和文字水印的功能。下面我们将...
在Java编程中,处理图像操作是一项常见的任务,其中包括裁剪图片和更改图片尺寸。下面将详细介绍这三种方法。 首先,我们来谈谈使用第三方工具ImageMagick。ImageMagick是一款强大的命令行工具,能够处理各种图像...
【标题】"图片处理程序JAVA源代码"是一个适合初学者的项目,旨在通过实际操作来教授Java编程的基础知识,特别是与图像处理相关的技术。在Java中处理图片涉及到多个类库和概念,例如Java的`java.awt`和`javax.imageio...
在图像处理领域,Java也提供了强大的工具和库,使得开发者能够创建复杂的图像处理程序。本项目就是一个基于Java编写的图像处理程序,它展示了如何利用Java进行图像的加载、编辑和保存。 在Java中,我们可以使用内置...