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) {
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 descDir
* 切片目标文件夹
* @param destWidth
* 目标切片宽度
* @param destHeight
* 目标切片高度
*/
public static void cut(String srcImageFile, String descDir, int destWidth,
int destHeight) {
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) {
//cut("C:/1.jpg", "C:/test/", 200, 150);
}
}
分享到:
相关推荐
工作分享:Java代码实现缩放图像,图像切割,变颜色,转类型
标题提到的“图片处理工具类”是一个Java编程中的实用工具类,它集成了多种图片处理功能,如图像的缩放、切割、类型转换、彩色转黑白、添加文字水印以及图片水印等。下面将详细解释这些知识点。 1. **图像缩放**: ...
5. **缩放**:缩放图像可以改变其大小,保持纵横比或不保持。Java 2D API的`BufferedImage`类提供了`getSubimage()`方法进行无损缩放,而`Graphics2D`的`drawImage()`方法配合适当的宽高比例可以进行有损缩放。 6. ...
高清缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等 功能非常强大,并且很清晰,请给好评:)
这个“JAVA GIF图像切割”主题就涉及到如何在Java环境中对GIF图像进行裁剪和保存。 首先,让我们了解GIF图像格式。GIF(Graphics Interchange Format)是一种流行的位图图像格式,支持透明度和动画。由于其跨平台的...
scale() 方法用于将图像缩放到指定的尺寸,而 cut() 方法用于将图像切割到指定的尺寸。 scale() 方法的实现中,我们可以看到以下几个步骤: 1. 读取源图像文件 2. 获取源图像的宽度和高度 3. 根据缩放比例计算新的...
- **图像操作**:包括缩放、旋转(90度、180度、270度)、图像灰度化等图像处理基本操作。 - **图像分析**:实现图像的直方图分析,帮助理解图像的像素分布情况。 - **图像变形**:如扭曲、拉伸、展宽等,用于改变...
本教程将聚焦于“图片缩放”与“Java实现的图片切割功能”,这对于初学者理解如何利用编程语言处理图像非常有帮助。 首先,我们要了解什么是图片缩放。图片缩放是指调整图像的尺寸,使其在保持原有比例的基础上变得...
`javax.imageio`用于读取、写入和操作图像,而`java.awt`提供了图形、颜色、形状和字体的支持。 1. **读取图片** 使用`ImageIO.read()`方法从文件或流中读取图片。例如: ```java File file = new File("path_to...
通过理解等比缩放和图片压缩的概念,以及如何在Java中实现它们,你可以有效地管理图像资源,提升应用的效率和用户体验。在实际操作中,你还可以探索更多高级功能,如色彩空间转换、滤波和增强等,以进一步优化你的...
在Java编程语言中,处理图像任务,如截图和切割图片,是常见的需求,尤其是在开发Web应用或社交平台时,例如用户头像的处理。本文将详细介绍如何使用Java进行头像截图和图片切割。 首先,Java提供了`java.awt.image...
首先,缩放图像的功能是通过调整图像的宽度和高度来实现的。在提供的代码中,定义了一个名为`scale`的方法,接收四个参数:源图像文件路径、结果图像路径、缩放比例和一个标志位,用于判断是放大还是缩小。方法内部...
综上所述,"jsp js java网页头像切割实例"是一个涵盖了前后端交互、图像处理、文件上传等多个技术点的综合实践。通过学习和掌握这些知识点,开发者能够构建出功能完善且用户体验良好的头像裁剪功能。
`java.awt`包提供了图形、颜色、字体等基本元素,而`javax.imageio`包则用于读取、写入和处理各种格式的图像文件。图片剪切通常涉及到获取用户选择的裁剪区域,然后对原始图像进行裁剪操作。这可以通过创建一个...
Bitmap是一个像素数据的容器,包含了图像的宽度、高度以及颜色格式等信息。在Android中,我们可以使用BitmapFactory类来解析图片资源,将其转化为Bitmap对象。例如: ```java Bitmap bitmap = BitmapFactory....
QQ背景墙切割是一个针对QQ软件个性化设置的专题,主要涉及图像处理、图形用户界面(GUI)设计以及可能的编程技术。在这个过程中,用户通常需要将一张大图分割成适合QQ聊天窗口显示的小图,以便作为自己的聊天背景。...
"瓦片"则特指地图瓦片技术,这是一种将大型地图图像切割成多个小块(通常为256x256像素)的方法,每个小块称为一个瓦片,便于网络传输和缓存,提高地图服务的性能。 【压缩包子文件的文件名称列表】...
例如,缩放图像可以使用`resize()`函数,旋转可以使用`rotate()`函数。这些操作在游戏开发中尤为常见,如将大图切割为多个小精灵,或者根据设备屏幕尺寸调整图像大小。 5. **图像透明度处理**: PNG的透明度由阿尔法...