【代码片】图像处理工具OpenCV、JAI、ImageJ、Thumbnailator和Graphics2D

本文主要是介绍【代码片】图像处理工具OpenCV、JAI、ImageJ、Thumbnailator和Graphics2D,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Graphics2D图像压缩

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;public class ImageResolutionModifier {public static void main(String[] args) {// 输入图片路径和输出图片路径String inputImagePath = "D:\\out1.png";String outputImagePath = "D:\\out1-graphics2d.jpg";// 目标宽度和高度int targetWidth = 1024;int targetHeight = 576;try {// 读取输入图片File inputFile = new File(inputImagePath);BufferedImage inputImage = ImageIO.read(inputFile);// 创建缩放后的图像BufferedImage outputImage = new BufferedImage(targetWidth, targetHeight, inputImage.getType());Graphics2D g2d = outputImage.createGraphics();g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);g2d.drawImage(inputImage, 0, 0, targetWidth, targetHeight, null);g2d.dispose();// 写入输出图片文件ImageIO.write(outputImage, "JPEG", new File(outputImagePath));System.out.println("图片分辨率修改成功,并保存到 " + outputImagePath);} catch (Exception e) {System.out.println("图片分辨率修改失败: " + e.getMessage());}}
}

Thumbnailator图像压缩

import net.coobird.thumbnailator.Thumbnails;
import java.io.File;public class ImageResolutionModifier {public static void main(String[] args) {// 输入图片路径和输出图片路径String inputImagePath = "D:\\out1.png";String outputImagePath = "D:\\out1-thumbnailator.jpg";// 目标宽度和高度int targetWidth = 1024;int targetHeight = 576;try {Thumbnails.of(new File(inputImagePath)).size(targetWidth, targetHeight).toFile(new File(outputImagePath));System.out.println("图片分辨率修改成功,并保存到 " + outputImagePath);} catch (Exception e) {System.out.println("图片分辨率修改失败: " + e.getMessage());}}
}

ImageJ图像压缩

import ij.ImagePlus;
import ij.io.FileSaver;
import ij.io.Opener;
import ij.process.ImageProcessor;public class ImageResolutionModifier {public static void main(String[] args) {// 输入图片路径和输出图片路径String inputImagePath = "D:\\out1.png";String outputImagePath = "D:\\out1-imagej.jpg";// 目标宽度和高度int targetWidth = 1024;int targetHeight = 576;try {// 打开输入图片Opener opener = new Opener();ImagePlus imp = opener.openImage(inputImagePath);ImageProcessor ip = imp.getProcessor();// 缩放图片ip = ip.resize(targetWidth, targetHeight);// 创建输出图片ImagePlus outputImage = new ImagePlus("Output Image", ip);// 保存调整分辨率后的图片到输出文件FileSaver fileSaver = new FileSaver(outputImage);fileSaver.saveAsJpeg(outputImagePath);System.out.println("图片分辨率修改成功,并保存到 " + outputImagePath);} catch (Exception e) {System.out.println("图片分辨率修改失败: " + e.getMessage());}}
}

JAI图像压缩

import javax.media.jai.Interpolation;
import javax.media.jai.JAI;
import javax.media.jai.RenderedOp;
import javax.media.jai.operator.ScaleDescriptor;public class ImageResolutionModifier {public static void main(String[] args) {// 输入图片路径和输出图片路径String inputImagePath = "D:\\out1.png";String outputImagePath = "D:\\out1-jai.jpg";// 目标宽度和高度int targetWidth = 1024;int targetHeight = 576;try {// 读取输入图片RenderedOp inputImage = JAI.create("fileload", inputImagePath);// 缩放图片RenderedOp scaledImage = ScaleDescriptor.create(inputImage, targetWidth / (float) inputImage.getWidth(),targetHeight / (float) inputImage.getHeight(), 0.0F, 0.0F, Interpolation.getInstance(Interpolation.INTERP_BICUBIC), null);// 保存调整分辨率后的图片到输出文件JAI.create("filestore", scaledImage, outputImagePath, "JPEG");System.out.println("图片分辨率修改成功,并保存到 " + outputImagePath);} catch (Exception e) {System.out.println("图片分辨率修改失败: " + e.getMessage());}}
}

OpenCV图像压缩

import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;public class ImageResolutionModifier {public static void main(String[] args) {// 加载 OpenCV 库System.loadLibrary(Core.NATIVE_LIBRARY_NAME);// 输入图片路径和输出图片路径String inputImagePath = "D:\\out1.png";String outputImagePath = "D:\\out1-opencv.jpg";// 目标宽度和高度int targetWidth = 1024;int targetHeight = 576;try {// 读取输入图片Mat inputImage = Imgcodecs.imread(inputImagePath);// 创建目标尺寸的图像Mat resizedImage = new Mat();Size size = new Size(targetWidth, targetHeight);Imgproc.resize(inputImage, resizedImage, size, 0, 0, Imgproc.INTER_AREA);// 保存调整尺寸后的图像Imgcodecs.imwrite(outputImagePath, resizedImage);System.out.println("图片分辨率修改成功,并保存到 " + outputImagePath);} catch (Exception e) {System.out.println("图片分辨率修改失败: " + e.getMessage());}}
}

参考文章:选择最佳图像处理工具OpenCV、JAI、ImageJ、Thumbnailator和Graphics2D
Powered By niaonao

这篇关于【代码片】图像处理工具OpenCV、JAI、ImageJ、Thumbnailator和Graphics2D的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847520

相关文章

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个