Java中图像处理的常用函数库介绍
Java中图像处理常用函数库
Java提供了许多图像处理函数库,常用的有Java图像处理库(Java Imaging API),Java高级图像API(Java Advanced Imaging API,简称JAI)和图像IO库等。
Java图像处理库(Java Imaging API)
Java Imaging API是JDK1.4版本以后自带的图像处理函数库,提供了一系列的图像处理操作,例如图像的读取、缩放、旋转、裁切、灰度化、色彩空间转换、图像滤波、 图像增强等,支持的图像格式包括JPEG、PNG、BMP、GIF等,以及TIFF和PSD格式的图像。
代码示例:
1.读取图像
File file = new File("image.jpg");
ImageIcon image = new ImageIcon(file.getPath());
2.缩放图像
ImageIcon image1 = new ImageIcon("image.jpg");
Image img = image1.getImage();
Image newimg = img.getScaledInstance(100, 100, java.awt.Image.SCALE_SMOOTH);
ImageIcon image2 = new ImageIcon(newimg);
3.灰度化
ImageIcon image1 = new ImageIcon("image.jpg");
BufferedImage bufferedImage = new BufferedImage(image1.getIconWidth(), image1.getIconHeight(), BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();
g2d.drawImage(image1.getImage(), 0, 0, null);
g2d.dispose();
ImageIcon image2 = new ImageIcon(bufferedImage);
Java高级图像API(Java Advanced Imaging API,简称JAI)
JAI是Java Imaging API的扩展库,提供了更高级的图像处理功能,例如添加水印、图像融合、图像拼接、曲线拟合、傅里叶变换等。JAI库支持的颜色深度、色彩空间、数据类型等方面的扩展也更加全面。
代码示例:
1.添加水印
//加载两张图片
File file1 = new File("image.jpg");
File file2 = new File("watermark.png");
RenderedImage image1 = JAI.create("fileload", file1.getAbsolutePath());
RenderedImage image2 = JAI.create("fileload", file2.getAbsolutePath());
//对水印图像进行透明度处理
ParameterBlock pb = new ParameterBlock();
pb.addSource(image2);
pb.add(0.5f);//透明度
RenderedImage alphaImage = JAI.create("constant", pb);
pb = new ParameterBlock();
pb.addSource(image2);
pb.add(alphaImage);
pb.add(CompositeDescriptor.DESTINATION_IN);//保留目标图像的透明度,根据透明度合成图片
RenderedImage blendedImage = JAI.create("composite", pb);
//将水印图片合成到原图片的右下角
pb = new ParameterBlock();
pb.addSource(image1);
pb.addSource(blendedImage);
pb.add(0.9f);//透明度
pb.add(320);//水印起始横坐标
pb.add(200);//水印起始纵坐标
RenderedImage finalImage = JAI.create("composite", pb);
//保存生成的图片
File file3 = new File("output.jpg");
JAI.create("filestore", finalImage, file3.getAbsolutePath(), "JPEG");
2.图像融合
//加载两张图片并进行均衡化处理
File file1 = new File("image1.jpg");
File file2 = new File("image2.jpg");
RenderedImage image1 = JAI.create("fileload", file1.getAbsolutePath());
RenderedImage image2 = JAI.create("fileload", file2.getAbsolutePath());
ParameterBlock pb1 = new ParameterBlock();
pb1.addSource(image1);
pb1.add(HistogramDescriptor.FIXED_BINS);
pb1.add(0.0f);
pb1.add(255.0f);
pb1.add(new int[]{256});
pb1.add(new double[][]{{0.0D, 255.0D}});
RenderedImage image1_Histo = JAI.create("histogram", pb1, null);
ParameterBlock pb2 = new ParameterBlock();
pb2.addSource(image2);
pb2.add(HistogramDescriptor.FIXED_BINS);
pb2.add(0.0f);
pb2.add(255.0f);
pb2.add(new int[]{256});
pb2.add(new double[][]{{0.0D, 255.0D}});
RenderedImage image2_Histo = JAI.create("histogram", pb2, null);
//将两张图片融合
RenderedImage blendedImage = JAI.create("add", image1_Histo, image2_Histo).getRendering();
//保存生成的图片
File file3 = new File("output.jpg");
JAI.create("filestore", blendedImage, file3.getAbsolutePath(), "JPEG");
图像IO库
图像IO库是Java中的图像读写函数库,支持的图像格式包括JPEG、PNG、BMP、GIF等,以及TIFF和PSD格式的图像。常用的函数包括读取和写入图像、读取和写入图像元数据等。
代码示例:
1.读取图像
InputStream inputStream = new FileInputStream("image.jpg");
BufferedImage bufferedImage = ImageIO.read(inputStream);
2.写入图像
File file = new File("output.jpg");
ImageIO.write(bufferedImage, "JPEG", file);
3.读取图像元数据
File file = new File("image.jpg");
ImageInputStream iis = ImageIO.createImageInputStream(file);
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
if (readers.hasNext()) {
ImageReader reader = readers.next();
reader.setInput(iis, true);
IIOMetadata metadata = reader.getImageMetadata(0);
//解析metadata
}
