为什么“convert x.png y.png”会创建不同大小 (KB) 的图像?

2024-02-15

我有一些图像,我试图通过调整它们的大小来将它们标准化到一定的比例。 当我开始调整图像大小时,我注意到它们的体积 (KB) 变得比原始图像大得多。

我通过简单地执行以下操作进一步检查了它: 转换 x.png y.png 并得到了一些差异。例如。在一种情况下,x.png 为 143KB,y.png 为 208KB。

由于我也在优化图像大小,我想知道是否有人知道为什么会出现这种情况以及解决此问题的任何建议。

我在 Windows 7 上使用 Imagemagick 6.6.4-Q16。

谢谢,阿米特

EDIT:

谢谢各位的建议,抱歉回复晚了!这是我尝试做的事情,这是结果。原始图像为 112KB。不使用参数进行转换会产生 169KB 的图像。在其上使用 OptiPNG(PNGCrush 对我不起作用)和 -o7 结果为 113KB。然后我尝试对 0-99 之间的每个 X 进行转换,我发现对于质量 90,我获得的文件大小为 116KB,因此 OptiPNG 更好。然而,当我将 resize 转换为较小的图像(按比例)时,我得到的是没有参数的 199KB,最佳转换质量 X (x=0) 的 196KB,OptiPNG 的 196KB。 当我期望文件变小时,文件大小增加了 75%,因为我将图像大小从 377x2290 调整为 234x1419 35%。有什么想法吗?

Thanks!

编辑-附加图像+调查的调整大小问题:

这是三个图像的链接(看标题):原始图像、简单 ImageMagick 转换后的图像以及 optipng 后的相同输出图像。http://picasaweb.google.com/101622787022351879933/ImageMagickProblem?feat=directlink http://picasaweb.google.com/101622787022351879933/ImageMagickProblem?feat=directlink

另外,我认为 ImageMagick 的调整大小选项可能存在问题。我做了以下练习来隔离它: 对于 1-100 之间的每个 x: 转换 a.png -调整大小 x% a_x.png

正如预期的那样,图像的大小几乎不断地从 1% 增加到 100%。 40%和50%略有下降。问题是,从 40% 开始,输出图像大小会绕过原始图像大小。仅当您达到 100% 时,图像大小才会大幅下降到原始大小(实际上,根据我的第一次编辑,图像大小为 169KB,而不是 112KB,优化后为 113KB)。

即使在每个输出文件上运行带有 -o7 的 Optipng 也无法纠正此问题。

您可以在下图中看到该实验的结果:http://picasaweb.google.com/lh/photo/fFL1W6SiUfFWhBqdUf3BZg?feat=directlink http://picasaweb.google.com/lh/photo/fFL1W6SiUfFWhBqdUf3BZg?feat=directlink


PNG 有许多不同的设置会影响压缩,并且不能保证默认的 ImageMagick 设置会选择特定的有效压缩。

最简单的解决方案是运行你的PNGOptiPNG http://optipng.sourceforge.net/ImageMagick 完成后。默认情况下,它应该生成接近最佳压缩的结果,但您可以要求它进行更详尽的测试以达到绝对最小值。

关于您的编辑:您必须注意的一件事是调整大小方法。 ImageMagick 将使用filter http://imagemagick.org/script/command-line-options.php#filter在调整大小期间,这会对您可以使用 PNG 压缩图像的程度产生很大影响:毕竟,PNG 是无损压缩,因此它不能像 JPEG 那样近似它。

哪种滤镜适合您实际上取决于您拥有的图像类型,但您可以尝试各种选项,看看什么看起来不错。不同的图像可能需要不同的滤镜。

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

为什么“convert x.png y.png”会创建不同大小 (KB) 的图像? 的相关文章

随机推荐

  • SIMD 或非 SIMD - 跨平台

    我需要一些想法如何编写一些可并行问题的 C 跨平台实现 以便我可以利用 SIMD SSE SPU 等 如果可用 我希望能够在运行时在 SIMD 和非 SIMD 之间切换 您建议我如何解决这个问题 当然我不想针对所有可能的选项多次实现该问题
  • 如何在java servlet中限制上传速度?

    我正在开发一个应用程序 基于 Spring 作为 DI 和 MVC 框架 该应用程序具有文件上传功能 该功能当前使用 Spring Multipart Upload 实现 反过来又利用公共文件上传库 所以我正在寻找一种降低上传带宽消耗的方法
  • 在 ngx-bootstrap 模式中向 onHide 事件发送参数

    我正在使用组件作为模板打开一个模式 一切正常 模式打开 我正在订阅 onHide 事件 订阅也有效 但我在这里面临一个挑战 我想发送一个特定的原因 例如 消息添加成功 作为原因 我怎样才能做到这一点 如何发送特定字符串作为原因 目前 我尝试
  • 正则表达式非贪婪是贪婪

    我有以下文字 tooooooooooooon 根据我正在读的这本书 当 跟在任何量词之后 它就变得非贪婪的 我的正则表达式to n仍在返回tooooooooooooon 它应该返回ton不应该吗 知道为什么吗 正则表达式只能匹配实际存在的文
  • 尝试注销 django 时出现运行时错误

    当我尝试从 django 项目注销时 出现以下错误 调用 Python 对象时超出最大递归深度 这是注销按钮的 URL url r logout users views logout name logout 这是视图 from django
  • 将自定义工具提示添加到 DataGrid 中的行

    我想自定义我的 DataGrid 以在所选行中显示工具提示 请参阅下面的模型图像以更好地了解我想要实现的目标 As it is at the moment Shows a single selected row 我多么愿意 显示选定的同一行
  • 复杂的 nHibernate QueryOver 表达式

    我在层次结构中有以下对象A gt B gt C gt D 每个对象都映射到一个表 我正在尝试使用 QueryOver 编写以下 SQL SELECT B FROM A B C D WHERE A ID B ID AND B ID C ID
  • 由于 ToList() 不起作用而返回视图

    我有这个代码 EmployeeEntities storeDB new EmployeeEntities public ActionResult Index var employee storeDB Employees ToList ToL
  • SQL Server 2005 执行MySQL REPLACE INTO?

    MySQL 有这个非常有用但专有的功能REPLACE INTOSQL 命令 这可以在 SQL Server 2005 中轻松模拟吗 开始一个新的事务 执行Select 然后要么UPDATE or INSERT and COMMIT总是有点痛
  • data.table 在非等价自连接上更新的奇怪行为

    在准备一个answer https stackoverflow com a 45781428 3817004对这个问题dplyr 或 data table 用于计算 R 中的时间序列聚合 https stackoverflow com q
  • Char* p 和 scanf

    我一直在尝试寻找以下代码失败的原因 但找不到 所以请原谅我的无知 让我知道这里发生了什么 include
  • 抛出异常返回服务器错误是否不好,例如。 404页面不存在?

    我正在开发 PHP 框架 目前正在设计错误处理 根据我在 SO 上读到的内容 我应该只在特殊情况下使用异常 因此 当输入错误的密码时抛出异常是错误的 当我想向用户返回服务器错误代码 例如 404 Page Not Found 时 是否应该避
  • 一个 $_GET 输入参数,它是一个数组

    我正在尝试将 3 个参数传递给脚本 其中第三个参数 GET value3 应该是一个数组 GET value1 GET value2 GET value3 an array of items 我这样调用脚本 注意我的语法value3 我不确
  • 如何对扩展 SqlMapClientDaoSupport 的 DAO 进行单元测试

    Spring DA 有助于编写 DAO 当使用iBATIS作为持久性框架并扩展SqlMapClientDaoSupport时 应该为DAO设置SqlMapClient模拟 但我不能这样做 SqlMapClientTemplate 不是一个接
  • 当我使用 Android Jetpack Compose 时,如何在 ViewModel 中设计 UI 状态类?

    我希望在 ViewModel 中设计 UI 状态类 以便在状态更改时启动 UI 重组 我读过一些示例项目 例如https github com android compose samples https github com android
  • 使用Java检索URL中的参数

    我有一个使用 XSL 和 XML 生成 PDF 的小 Servlet 因为我想通过 URL 指定文件 所以我需要从那里获取这些参数 localhost Servlet xml c xml test xml xsl c xsl test xs
  • 如何从 ASP 页运行 sqlcmd.exe?

    作为数据库修订控制 和自动安装 过程的一部分 我们需要能够在 ASP 页面内对各种 sql 文件运行 sqlcmd exe 我用来执行此操作的代码是 Dim cmd cmd sqlcmd S DATABASE SERVER U DATABA
  • 客户端程序验证 SSL_get_peer_certificate 返回的服务器证书?

    我有一个使用 C 编程语言中的 OpenSSL 的 SSL TLS 客户端程序 我正在寻找验证服务器证书的方法 X509 返回者SSL get peer certificate函数调用 另外 我还使用加载了自己的 CA 证书SSL CTX
  • MongoDB GetCollection 方法是否将整个集合加载到 RAM 或引用中? C#

    我有一个存储库类 用于处理 MongoDB 的所有数据库函数 这是构造函数的实现 public LocationRepository string connectionString if string IsNullOrWhiteSpace
  • 为什么“convert x.png y.png”会创建不同大小 (KB) 的图像?

    我有一些图像 我试图通过调整它们的大小来将它们标准化到一定的比例 当我开始调整图像大小时 我注意到它们的体积 KB 变得比原始图像大得多 我通过简单地执行以下操作进一步检查了它 转换 x png y png 并得到了一些差异 例如 在一种情