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 ChangeImageSize
...{
/** *//**
* 缩放图像
* @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)
...{
scale("D:\100CASIO\CIMG0001.JPG","C:\Documents and Settings\ibm\桌面\image.jpg",10,false);
}
}
分享到:
相关推荐
如果需要在程序中操作图片,可以使用Java的`javax.imageio`包中的`ImageIO`类将字节流转换为`BufferedImage`对象: ```java BufferedImage image; try (InputStream is = new ByteArrayInputStream(imageData))...
在Java编程中,字节流(Byte Stream)是处理数据的基本方式,特别是在处理二进制数据,如图片、音频或视频文件时。本教程将详细讲解如何使用Java实现字节流与图片之间的转换,这对于在网络上传输或者存储图片等二...
Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流...
本项目"用Java实现的图片加密程序"正是关注这一主题,它利用Java的IO流处理技术,实现了对图片文件的加密和解密功能。以下是关于这个项目的一些详细知识点: 1. **Java IO流**:Java的IO流是处理输入输出的基础,它...
- 字节流:Java中的InputStream和OutputStream是所有字节输入流和输出流的基类,包括FileInputStream、FileOutputStream等,用于处理二进制数据,如图片、音频等。 - 字符流:Reader和Writer是所有字符输入流和...
Xuggler是基于C++的FFmpeg库的一个Java封装,它允许开发者直接在Java中操作音视频流。ffmpeg4java则是对FFmpeg命令行工具的Java包装,通过执行命令行指令实现视频处理。这两种库都能很好地完成图片转视频的任务。 ...
本篇将详细介绍如何使用Java来操作Word和PDF文档,并在其中的图片上生成水印。 首先,我们关注的是Java对Word文档的操作。Apache POI是一个非常流行的Java库,用于读写Microsoft Office格式的文件,包括Word(.docx...
4. **图片处理库**:为了显示和操作图片,系统可能依赖于Java的内置库如Java AWT或第三方库如Apache Commons Imaging(前身是Sanselan)或Java Advanced Imaging (JAI)。这些库提供了读取、解析、转换不同格式图片的...
Java流是Java编程语言中处理输入输出操作的重要机制,它为数据传输提供了高效且灵活的方式。在Java中,文件操作是通过流的概念实现的,这允许我们读取、写入、移动、复制以及修改文件。下面我们将深入探讨Java流如何...
在这个场景中,我们关注的是如何利用Java POI库通过Word模板生成包含特定文本、表格和图片的报告。 首先,我们需要了解Java POI中的XWPFDocument类,它是用来处理.docx文件的。XWPFDocument可以读取、修改和创建...
在实践中,结合这些流的特性,我们可以实现复杂的文件操作,如读取文件内容,写入文件,复制文件,或者处理二进制文件(如图片、音频等)。通过理解这些基础知识,开发者可以更好地管理Java应用程序中的文件输入输出...
`java.awt`包中的`BufferedImage`类用于创建和操作图像,而`javax.imageio`包则用于读取、写入和操作各种格式的图像文件。 添加水印的过程通常包括以下步骤: 1. **读取原始图片**:使用`ImageIO.read()`方法从...
在Java编程中,将图片写入Excel文件是一项常见的任务,特别是在数据分析、报表生成或数据可视化的情景下。这里,我们将详细探讨如何实现这个功能,主要依赖于`Apache POI`库来操作Excel,并结合`JFreeChart`库来创建...
在Java中,我们可以使用Java AWT或Swing库中的`BufferedImage`类来处理和操作图片。 2. 视频编码: 视频是由连续的图像帧组成的,这些帧以特定的帧率播放,给人以动态的视觉效果。编码是将这些图像帧转化为特定...
本实例将深入讲解如何使用Java I/O流进行文件的读取和写入操作。 首先,Java中的I/O流分为两大类:字节流和字符流。字节流处理的数据单位是字节,而字符流处理的是Unicode字符。字节流包括InputStream和...
- 使用Java的文件I/O操作,如`java.nio.file.Files`类,可以遍历指定目录下的所有图片文件,逐一进行处理。 - 多线程技术可以加速批量处理过程,通过`java.util.concurrent`包中的工具,如`ExecutorService`和`...
本实例将详细介绍如何使用Java和MySQL进行图片的存取操作。 首先,让我们了解MySQL中的BLOB类型。BLOB是一个用来存储大量二进制数据的字段类型,它不受字符集的限制,适合存储图像、音频或视频文件等。MySQL提供了...
首先,字节流主要用于处理二进制数据,如图片、音频文件等,而字符流则更适合处理文本数据。在Java中,字节流的基类是`InputStream`和`OutputStream`,分别用于处理输入和输出。字符流的基类则是`Reader`和`Writer`...
然后,可以调用Java的图片处理函数,对保存的图片进行操作。最后,返回处理后的图片路径或者直接显示在页面上。 在实际应用中,我们还需要考虑性能优化,比如使用内存缓存减少磁盘I/O,或者使用多线程处理大量图片...
在本文中,我们将深入探讨如何使用Java语言配合海康威视的SDK来抓取NVR(网络视频录像机)的图片和视频流,并实现实时显示。海康威视是全球知名的安防监控设备制造商,其提供的SDK允许开发者进行深度集成和定制化...