package util;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import java.awt.color.ColorSpace;
import javax.imageio.ImageIO;
public class ImageCut {
/**
* 缩放图像:按比例
*
* @param srcImageFile
* 源图像文件地址
* @param result
* 缩放后的图像地址
* @param scale
* 缩放比例
* @param flag
* 缩放选择:true 放大; false 缩小;
*/
public static void scale(String srcImageFile, String result, int scale,
boolean flag) {
if (!new File(result).exists()) {
if (!(new File(result).isDirectory()))
new File(result).mkdir();
}
try {
BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
int width = src.getWidth(); // 得到源图宽
int height = src.getHeight(); // 得到源图长
if (flag) {
// 放大
width = width * scale;
height = height * scale;
} else {
// 缩小
width = width / scale;
height = height / scale;
}
Image image = src.getScaledInstance(width, height,
Image.SCALE_DEFAULT);
BufferedImage tag = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); // 绘制缩小后的图
g.dispose();
ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 缩放图像:指定大小: 实现等比例缩放
*
* @param srcImageFile:
* 源图像文件地址
* @param result:
* 缩放后的图像地址
* @param suffix:后缀
* @param width:指定宽
* @param height指定高
*/
public static void scale(String srcImageFile, String resultPath,
String fileName, String suffix, Integer width, Integer height) {
if (!new File(resultPath).exists()) {
if (!(new File(resultPath).isDirectory()))
new File(resultPath).mkdir();
}
try {
BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
int w = src.getWidth(); // 得到源图宽
int h = src.getHeight(); // 得到源图长
int ww = 0;
int hh = 0;
if (w > 0 && h > 0) {
if (w / h >= width / height) {
if (w > width) {
ww = width;
hh = (h * width) / w;
} else {
ww = w;
hh = h;
}
} else {
if (h > height) {
hh = height;
ww = (w * height) / h;
} else {
ww = w;
hh = h;
}
}
}
Image image = src.getScaledInstance(ww, hh,
Image.SCALE_DEFAULT);
BufferedImage tag = new BufferedImage(ww, hh,
BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); // 绘制缩小后的图
g.dispose();
String path = resultPath + "\\" + fileName + suffix;
ImageIO.write(tag, "JPEG", new File(path));// 输出到文件流
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 图像切割
*
* @param srcImageFile
* 源图像地址
* @param descDir
* 切片目标文件夹
* @param destWidth
* 目标切片宽度
* @param destHeight
* 目标切片高度
*/
public static void cut(String srcImageFile, String descDir, int destWidth,
int destHeight) {
if (!new File(descDir).exists()) {
if (!(new File(descDir).isDirectory()))
new File(descDir).mkdir();
}
try {
Image img;
ImageFilter cropFilter;
// 读取源图像
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getHeight(); // 源图宽度
int srcHeight = bi.getWidth(); // 源图高度
if (srcWidth > destWidth && srcHeight > destHeight) {
Image image = bi.getScaledInstance(srcWidth, srcHeight,
Image.SCALE_DEFAULT);
destWidth = 200; // 切片宽度
destHeight = 150; // 切片高度
int cols = 0; // 切片横向数量
int rows = 0; // 切片纵向数量
// 计算切片的横向和纵向数量
if (srcWidth % destWidth == 0) {
cols = srcWidth / destWidth;
} else {
cols = (int) Math.floor(srcWidth / destWidth) + 1;
}
if (srcHeight % destHeight == 0) {
rows = srcHeight / destHeight;
} else {
rows = (int) Math.floor(srcHeight / destHeight) + 1;
}
// 循环建立切片
// 改进的想法:是否可用多线程加快切割速度
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
// 四个参数分别为图像起点坐标和宽高
// 即: CropImageFilter(int x,int y,int width,int height)
cropFilter = new CropImageFilter(j * 200, i * 150,
destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(image.getSource(),
cropFilter));
BufferedImage tag = new BufferedImage(destWidth,
destHeight, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null); // 绘制缩小后的图
g.dispose();
// 输出为文件
ImageIO.write(tag, "JPEG", new File(descDir
+ "pre_map_" + i + "_" + j + ".jpg"));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)
*/
public static void convert(String source, String result) {
try {
File f = new File(source);
f.canRead();
f.canWrite();
BufferedImage src = ImageIO.read(f);
ImageIO.write(src, "JPG", new File(result));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 彩色转为黑白
*
* @param source
* @param result
*/
public static void gray(String source, String result) {
try {
BufferedImage src = ImageIO.read(new File(source));
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op = new ColorConvertOp(cs, null);
src = op.filter(src, null);
ImageIO.write(src, "JPEG", new File(result));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
scale("e:/1.jpg", "e:/t/", "2", "_houzhui.jpg", 200, 150);
}
}
分享到:
相关推荐
SimpleImage是阿里巴巴的一个Java图片处理的类库,可以实现图片缩略、水印等处理。 SimpleImage中的ImageRender是图片处理的基类,它是一个抽象类,我们看到,该类中定义了一个抽象方法render(),同时持有一个对...
Java图片处理工具ImageMagick是一个强大的跨平台图形处理库,它允许开发人员在Java应用程序中进行复杂的图像操作,包括但不限于转换、编辑、合成图像以及处理大量格式的图像文件。ImageMagick是由C语言编写的,但...
java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 java 图片处理工具类 ...
这是一个Java图片处理程序。 Java 开源代码,高手学习 java 图片处理源码
在Java编程语言中,处理...综上所述,这段代码展示了Java如何利用AWT库进行图片处理,包括添加图片和文字水印,以及处理透明度和定位。这些都是Java图形处理的基本技术,对于开发涉及图像编辑和处理的应用非常有用。
在Java编程领域,图片处理是一项常见的任务,尤其是在网站开发、移动应用或者数据分析中。这个"java 图片处理类"提供了一种便捷的方式,用于给图片添加水印以及压缩图片,这是开发过程中非常实用的功能。下面将详细...
Java图片处理类是Java编程语言中用于操作和处理图像文件的核心技术,主要涉及Java的AWT(Abstract Window Toolkit)和Swing库。在Java课程设计中,学生通常会被要求掌握这些概念并应用到实际项目中,例如创建一个...
java图片缩放 java缩略图 缩略图 java图片处理
java图片处理工具类JAR包 java-image-scalingjar
java图片处理 根据大小获取指定大小图片 以及图片尺寸处理 等等java图片处理 根据大小获取指定大小图片 以及图片尺寸处理 等等java图片处理 根据大小获取指定大小图片 以及图片尺寸处理 等等java图片处理 根据大小...
这里我们关注的是“rt java图片处理jar包”,这个标题暗示了一个专门用于处理图片的Java库,可能封装了一些方便开发者使用的API。描述中的“图片水印处理,java图片处理”进一步确认了这个库的主要功能之一是添加...
Java 图片处理解决方案:ImageMagick 快速入门教程 Java 图片处理解决方案中,ImageMagick 是一个免费的创建、编辑、合成图片的软件,可以实现图片切割、颜色替换、图片缩略图、图片水印等各种效果。ImageMagick 是...
java 图片处理 切图代码 实现自动缩放图片
图片添加水印图片、可设置水印图片旋转角度;图片添加水印文字(自动换行)、可设置水印文字的旋转角度;获取文本所占长度像素;图片截取;图片高质量缩放;图片png格式缩放;图片克隆副本;读取图片对象;图片输出 ...
Java 图片处理库Java Advanced Imaging (JAI) 是一个强大的工具,用于在Java环境中进行复杂的图像操作和处理。这个库提供了丰富的功能,包括但不限于图片的读取、写入、旋转、缩放、颜色空间转换以及各种滤镜应用。...
Java图片处理-生成火焰效果,public class FirePicApplet extends Applet implements Runnable{ private Image backImage,foreImage; //前景和背景Image对象 private Image image,fireImage; //Applet和绘制...
这是一个java生成随即图片验证码,java图片压缩,java图片水印 ,java图片裁剪 ,java图片旋转 ,java图片放大缩小等工具类,里面有测试方法,欢迎使用!