java制作海报六:Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题

简介: 这篇文章是关于如何在Java中使用Graphics2D的RenderingHints方法来提高海报制作的图像质量和文字清晰度,包括抗锯齿和解决文字不清晰问题的技术详解。

前言

  1. 文字换行算法详解,传送门:java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
  2. 头像切割成圆形方法详解,传送门:java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
  3. 获取微信二维码详情,传送门:java制作海报三:获取微信二维码详情,并改变大小,合成到海报(另一张图片)上
  4. java BufferedImage 转 InputStreampng 图片合成到模板(另一个图片)上时,透明部分变成了黑色,传送门:java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
  5. java 整合echarts 画出 折线图,传送门:
  6. Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题,传送门:java制作海报六:Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题
  7. 项目部署到linux下中文不显示,echarts图上的中文也不显示问题,传送门:java制作海报七:java Graphics2D 合成图片 在 linux下中文不显示,echarts图上的中文也不显示问题
  • 这里的代码都在上面的 GitHub

一、需求描述

在 使用 java Graphics2D 进行画图时,有一个配置如下:
在这里插入图片描述
这个方法g2d.setRenderingHint()配置很常见,这个配置也很重要,可以配置抗锯齿,使图片合成变的清晰,不再失真。
以下配置,也可以进行对文字进行配置抗锯齿,解决不清晰问题。

这个方法的配置项,是key value的形式。
下面进行配置项讲解

二、RenderingHints 配置详解

RenderingHints 类定义了多种着色微调,它们存储在一个映射集的 Graphics2D 对象里。setRenderingHint() 方法的参数是一个键值对的形式。

下面详细介绍各个常用键值的含义:

  1. KEY_ANTIALIASING 决定是否使用抗锯齿。当着色有倾斜角度的线时,通常会得到一组阶梯式的像素排列,使这条线看上去不平滑,经常被称为 锯齿状图形。抗锯齿是一种技术,它设置有倾斜角度的线的像素亮度,以使线看起来更平滑。因此,这个微调是用来决定在着色有倾斜角度的线时是否在减少锯齿状图形上花费时间。可能的值有 VALUE_ANTIALIAS_ON(使用抗锯齿)、VALUE_ANTIALIAS_OFF(不使用抗锯齿) 和 VALUE_ANTIALIAS_DEFAULT(默认的抗锯齿)

  2. KEY_COLOR_RENDERING 控制颜色着色的渲染方式。可能的值有 VALUE_COLOR_RENDER_SPEED(追求速度)、VALUE_COLOR_RENDER _QUALITY(追求质量) 和 VALUE_COLOR_RENDER_DEFAULT(默认)

  3. KEY_DITHERING 控制如何处理抖动。抖动是用一组有限的颜色合成出一个更大范围的颜色的过程,方法是给相邻像素着色以产生不在该组颜色中的新的颜色幻觉。可能的值有 VALUE_DITHER_ENABLE(不抖动)、VALUE_DITHER _DISABLE (抖动)和 VALUE_DITHER_DEFAULT(默认)

  4. KEY_FRACTIONALMETRICS 字体规格。可能的值有VALUE_FRACTIONALMETRICS_ON(启用字体规格)、VALUE_FRACTIONALMETRICS_OFF(禁用字体规格) 和VALUE_FRACTIONALMETRICS _DEFAULT(默认)

  5. KEY_INTERPOLATION 确定怎样做内插。在对一个源图像做变形时,变形后的像素很少能够恰好对应目标像素位置。在这种情况下,每个变形后的像素的颜色值不得不由周围的像素决定。内插就是实现上述过程。有许多可用的技术,可能的值,按处理时间从最多到最少,是 VALUE_INTERPOLATION_BICUBIC、 VALUE_INTERPOLATION_BILINEAR 和 VALUE_INTERPOLATION_NEAREST_NEIGHBOR

  6. KEY_RENDERING 确定着色技术,在速度和质量之间进行权衡。可能的值有 VALUE_RENDERING_SPEED(追求速度)、VALUE_RENDERING _QUALITY(追求质量) 和VALUE_RENDERING_DEFAULT(默认)

  7. KEY_TEXT_ANTIALIASING 确定对文本着色时是否抗锯齿。可能的值有 VALUE_TEXT_ANTIALIASING_ON(使用抗锯齿呈现文本)、VALUE_TEXT_ANTIALIASING _OFF (不使用抗锯齿呈现文本)和VALUE_TEXT_ANTIALIASING _DEFAULT(使用平台默认的文本抗锯齿模式呈现文本)

  8. KEY_ALPHA_INTERPOLATION 代表 alpha 合成微调的键,该微调可能的值有 VALUE_ALPHA_INTERPOLATION_SPEED(追求速度)、VALUE_ALPHA_INTERPOLATION_QUALITY(追求质量)和VALUE_ALPHA_INTERPOLATION_DEFAULT,代表平台缺省值。

  9. KEY_STROKE_CONTROL 笔划规范化控制,可能有的值有VALUE_STROKE_NORMALIZE、VALUE_STROKE_PURE和VALUE_STROKE_DEFAULT

相关文章
|
25天前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
184 18
|
1月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
164 4
|
1月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
203 5
|
2月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
112 11
|
2月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
3月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
318 0
|
3月前
|
存储 Java 数据处理
Java映射操作:深入Map.getOrDefault与MapUtils方法
结合 `getOrDefault`方法的简洁性及 `MapUtils`的丰富功能,Java的映射操作变得既灵活又高效。合理地使用这些工具能够显著提高数据处理的速度和质量。开发人员可以根据具体的应用场景选择适宜的方法,以求在性能和可读性之间找到最佳平衡。
137 0
|
8月前
|
存储 JSON Java
《从头开始学java,一天一个知识点》之:方法定义与参数传递机制
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 🚀 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。上篇:《输入与输出:Scanner与System类》 | 下篇剧透:《方法重载与可变参数》。
162 25
|
存储 Java 编译器
【Java变量】 局部变量、成员变量(类变量,实例变量)、方法参数传递机制
【Java变量】 局部变量、成员变量(类变量,实例变量)、方法参数传递机制
246 0
【java筑基】——为什么java中方法的参数传递机制没有引用传递
【java筑基】——为什么java中方法的参数传递机制没有引用传递