为什么这个图像在Java中按比例缩小后看起来这么糟糕?

2023-11-22

这是原始图像:http://rank.my/public/images/uploaded/orig-4193395691714613396.png

这里它被缩小到 300x225:

http://rank.my/public/images/uploaded/norm-4193395691714613396.png

这里它被缩小到 150x112:

http://rank.my/public/images/uploaded/small-4193395691714613396.png

正如您所看到的,300x225 看起来很糟糕,150x112 看起来很糟糕。这是我用来缩小图像的代码:

private static BufferedImage createResizedCopy(final BufferedImage source, final int destWidth,
        final int destHeight) {
    final BufferedImage resized = new BufferedImage(destWidth, destHeight, source.getType());
    final Graphics2D bg = resized.createGraphics();
    bg.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    bg.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    bg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    final float sx = (float) destWidth / source.getWidth();
    final float sy = (float) destHeight / source.getHeight();
    bg.scale(sx, sy);
    bg.drawImage(source, 0, 0, null);
    bg.dispose();
    return resized;
}

我在这里做错了什么?图像缩放不必特别快,质量绝对优先于速度。我使用了错误的技术吗?


解决缩小问题的方法有3种。首先是分多个步骤进行,每个步骤的减少量不超过 75%。第二种是在调整大小之前对图像进行模糊处理;它收缩得越多,你就越需要模糊。第三种方法是使用一种方法,该方法使用比朴素双线性或双三次插值方法所使用的 2x2 到 4x4 像素块更多的像素块进行过滤。随着收缩因子变大,过滤器使用的像素块也应该变大,否则您会得到锯齿伪影,如您在此处看到的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个图像在Java中按比例缩小后看起来这么糟糕? 的相关文章

  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • 使用 jQuery 最小化/最大化 div

    我基本上想最小化一些 div 我不想使用 和 而是想使用一些符号 来自 font awesome 来最小化和最大化 div 我对此的问题 如何在这段代码中插入图标 的类 我尝试用 attr 替换 html 部分 但这没有成功 多谢 Upda
  • 如何在 OnCompleteListener Firebase 中使用异步/等待/协程

    我正在构建一个客户端应用程序 它使用 Firebase 来做两件事 用户认证 使用实时数据库 我已成功在客户端和后端服务器上正确设置所有内容 使用 Firebase 的 Admin SDK 并且能够正确验证用户身份并允许他们读取 写入数据库
  • 哪些代码控制 WPF 应用程序的启动?

    更具体地说 我怎样才能设置像这样的启动顺序在 WPF 中 启动时不显示窗口 但存在通知图标 要运行 WPF 需要Application目的 当你执行时Run在该对象上 应用程序进入无限循环 事件循环负责处理用户输入和任何其他操作系统信号 换
  • 为什么运行一次(并且从未加载)的 Meteor 应用程序的数据库占用了近 3GB?

    UPDATE 这个问题在 Meteor v0 4 2012 之后得到了修复 出于历史目的 摘自du 2890768 Code Meteor QuarterTo meteor local db journal 2890772 Code Met
  • Dask read_csv 失败,而 pandas 则失败

    尝试使用 dask 的read csv在文件中 pandas 的位置read csv像这样 dd read csv data ecommerce new csv 失败并出现以下错误 pandas errors ParserError Err
  • 使用子类对象访问超类函数

    我有一个扩展其超类的子类对象 子类中有一个重写的方法 可以使用该对象调用 是否可以使用子类对象调用超类的函数 package supercall public class Main public static void main Strin
  • 如何编写可以运行 x86 十六进制代码的 C 程序

    我有一组十六进制代码 可以转换为汇编指令 我想用 C 语言创建可以执行这些指令的程序 unsigned char rawData 5356 0x4C 0x01 0x0A 0x00 0x00 0x00 0x00 0x00 0x64 0x0C
  • 如何在 php 中从 .doc 模板创建 word .doc 文件

    我需要从Word模板创建一个Word文档 就像我们需要用值替换模板中的几个字符串 比如变量 请告诉我们如何在 PHP 或 cakePHP 中做到这一点 我建议查看 phpLiveDocx http www phplivedocx org 还
  • 存储指令是否会在缓存未命中时阻塞后续指令?

    假设我们有一个具有两个核心 C0 和 C1 的处理器和一个从地址开始的高速缓存行k最初由 C0 拥有 如果 C1 在第 8 行的 8 字节槽上发出存储指令k 这会影响 C1 上执行的以下指令的吞吐量吗 intel优化手册有如下一段 当指令将
  • Java 的接口优势

    我的问题很简单 如果接口由单个类实现 那么使用接口有什么优势吗 我一直认为只有当接口有多个实现时 接口才是好的 Thanks 一句话 不 接口所表示的契约可以直接在您唯一的类中指定 如果您清楚将来不需要相同方法的另一个实现 则可以避免定义接
  • 选择框选项上的工具提示

    我有一个选择框 其中选项具有策略名称 我需要在选项的工具提示中显示策略的描述 我尝试了tipr插件 其中使用了data tip选项 它适用于 div span 等 但不适用于选择框选项 我还尝试了上面链接中附加的正常方法 仅当下拉列表默认打
  • .NET 5 GRPC 客户端调用引发异常:在未启用 HTTP/2 的情况下使用版本策略 RequestVersionOrHigher 请求 HTTP 版本 2.0

    这是我的第一个 gRPC 应用程序 我尝试从 NET 5 gRPC 客户端 Grpc Net Client 2 35 0 调用服务器流式 RPC 调用 这会在我的本地开发环境中导致以下异常 Grpc Core RpcException 状态
  • 如何在google v8(和nodejs)中渲染32位unicode字符

    有谁知道如何在谷歌v8 驱动谷歌浏览器和nodejs的javascript虚拟机 中渲染unicode 星体平面 字符 其CID超出0xffff 有趣的是 当我给google chrome 它标识为11 0 696 71 在ubuntu 1
  • 如何使用 FieldValue.serverTimestamp() 在 android 中自定义模型类

    我使用 Firestore 作为数据库 现在我想在用户注册时存储服务器时间戳 来自 Firestore 文档 Map
  • 使用 jquery 增加和减少输入值

    单击 和 按钮时我需要增加和减少输入的值 但它似乎不起作用 我从这篇文章中得到了代码 如何使用 jQuery 增加数量字段的值 单击添加按钮时 我插入了一条 console log 语句以进行调试 令人惊讶的是 即使我单击了 id 为 ad
  • 分布式作业调度、管理和报告

    我最近玩了Hadoop它对 MapReduce 作业的调度 管理和报告印象深刻 它似乎使新作业的分配和执行变得非常无缝 使开发人员能够专注于其作业的实施 我想知道Java领域中是否存在一些对于作业的分布式执行来说不容易表达为MapReduc
  • RandomNumber 方法每次调用都返回相同的数字

    每次从 for 循环中调用 RandomNumber 方法时 我都尝试生成不同的随机数 现在 它每次都返回相同的数字 这是我的 RandomNumber 方法 private int RandomNumber int min int max
  • 我如何模拟 java.time.LocalDate.now()

    在我的测试用例中 我需要测试时间敏感的方法 在该方法中我们使用 java 8 类 LocalDate 它是not Joda 当我运行测试时 我可以做什么来改变时间 在您的代码中 替换LocalDate now with LocalDate
  • 语音合成 API 在说出单词时突出显示单词

    目前 我正在制作一个简单的应用程序 其中使用语音合成 API 说出文本 我想突出显示正在说出的单词 粗体 我目前有一个非常基本的实现 使用 onboundary 事件来执行此操作 然而 我想知道是否有更好 更好的方法来做到这一点 因为我的实
  • 为什么这个图像在Java中按比例缩小后看起来这么糟糕?

    这是原始图像 http rank my public images uploaded orig 4193395691714613396 png 这里它被缩小到 300x225 http rank my public images uploa