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("c:\\test\\456.jpg","C:\\test\\image1.jpg",2,false);
cut("c:\\test\\456.jpg","C:\\test\\image2.jpg",64,64);
gray("c:\\test\\456.jpg","C:\\test\\image4.jpg");
}
}
分享到:
相关推荐
标题提到的“图片处理工具类”是一个Java编程中的实用工具类,它集成了多种图片处理功能,如图像的缩放、切割、类型转换、彩色转黑白、添加文字水印以及图片水印等。下面将详细解释这些知识点。 1. **图像缩放**: ...
Java图像处理技术是Java开发中的一个重要领域,涵盖了多种操作,如添加水印、图像分割、裁剪和缩放。在本项目中,这些功能被整合到一个完整的程序中,并通过单元测试进行了验证,确保了各个功能的正确性。此外,程序...
高清缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等 功能非常强大,并且很清晰,请给好评:)
在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架下与Halcon库集成,实现图像的鼠标缩放和拖动功能。Halcon是一款强大的机器视觉软件,提供了丰富的图像处理函数,而MFC是C++编程中用于构建...
Java图片处理类是Java编程语言中用于操作和处理图像文件的核心技术,主要涉及Java的AWT(Abstract Window Toolkit)和Swing库。在Java课程设计中,学生通常会被要求掌握这些概念并应用到实际项目中,例如创建一个...
5. 图像的缩放与旋转:Java的AffineTransform类提供了图像缩放和旋转的功能,通过定义变换矩阵,可以实现对图像的几何变换。 6. 转换色彩空间:例如,将RGB图像转换为HSB或YUV空间,以便进行色彩分析和调整。Java...
在数字图像处理领域,256彩色图像是一种广泛使用的图像类型。这种图像通常采用8位颜色深度,可以显示从纯黑到纯白之间256种不同的灰度级或颜色,因此被称为256色图像。这个压缩包文件“数字图像处理图片集256彩色...
本压缩包文件包含的是利用GDI++实现的一些关键图像操作,如图像压缩、图像裁剪和缩放、图像格式转换以及图像DPI(每英寸点数)修改。接下来,我们将深入探讨这些知识点。 首先,图像压缩是减小文件大小以节省存储...
本资源"数字图像处理-Java语言算法描述.zip"包含了一系列关于如何使用Java来实现数字图像处理算法的详细资料。下面我们将深入探讨其中涉及的一些关键知识点。 1. **图像基本概念**: - 图像像素:图像的基本组成...
在Java编程领域,图片处理是一项常见的任务,其中图像缩放是尤为重要的操作。当我们需要调整图片大小,以适应不同的应用场景,如网页、移动设备或打印等,就需要进行图像缩放。本文将深入探讨Java中实现图像缩放的...
Android提供了多种库和API来处理图像,例如Bitmap类用于表示位图图像,Matrix类则用于处理图像的变换,如旋转、平移和缩放。在裁剪图片时,通常会用到ImageView和CropImageView等视图组件。 移动图片: 1. 创建一个...
彩色图像转换软件是一种用于处理和转换彩色图像的应用程序,它能够帮助用户将图像从一种格式转换为另一种格式,同时可能还支持对图像的颜色、尺寸、质量和格式进行一系列的调整和优化。在数字图像处理领域,这类软件...
这种处理方式通常用于将黑白照片或者单色数据转换为彩色,以更直观地展示信息。MATLAB作为一种强大的数值计算和图形处理工具,非常适合进行伪彩色处理。 在MATLAB中,我们可以利用其丰富的图像处理函数来实现这一...
你可以通过它们来了解不同的图像格式、图像的读取和显示方法,以及各种图像处理技术,例如图像的灰度化、色彩空间转换、滤波、边缘检测、缩放、旋转等。同时,MATLAB等工具的应用可以让你实际操作这些过程,加深理论...
使用javacv进行图像处理,对图片进行拉伸缩放、黑边填充缩放、图像翻转 同时对图片关联的YOLO格式注释数据进行缩放、翻转等操作
8. **图像流处理**:在处理大量图像时,如在服务器端进行批量图片处理,可以使用图像流来提高效率。Java的`ImageInputStream`和`ImageOutputStream`提供这种能力。 9. **JPEG和PNG编码解码**:了解如何使用Java的`...
2. 灰度化处理:将彩色图像转换为灰度图像,通常采用亮度加权平均法或RGB颜色空间的某个通道作为灰度值。 3. 颜色空间转换:例如从RGB转换到HSV或Lab空间,这些颜色模型在不同的图像分析任务中具有独特优势。 4. ...
同时,还可以结合其他图像处理技术,如色彩转换、缩放或旋转,以实现更复杂的图像效果。 在压缩包中的"图像处理(模糊处理、锐化处理)"文件,可能包含这些示例代码的完整实现。通过研究这些代码,你可以更好地理解...
2. **图像处理操作**:包括图像的缩放、裁剪、旋转、色彩空间转换(如RGB到灰度)、直方图均衡化、滤波操作(如高斯滤波、中值滤波)等。 3. **特征检测与匹配**:JavaCV支持SIFT、SURF、ORB等特征检测算法,以及...
标题《数字图像处理-Java语言算法描述》意味着本文将围绕数字图像处理技术与Java语言的结合进行阐述。从描述中可知,该文档可能引用了Wilhelm Burger和Mark J. Burge编著的《Digital Image Processing》一书,这是一...