【问题标题】:How Do I Change Output Resolution On Existing Image With RMagick/ImageMagick?如何使用 RMagick/ImageMagick 更改现有图像的输出分辨率?
【发布时间】:2013-09-12 16:32:08
【问题描述】:

ImageMagick 和 RMagick 都具有“密度”的设置/属性,这就是他们所说的分辨率。我可以传递一个 200 的值,当图像写入文件或 to_blob 时,它应该将分辨率设置为 200x200。

在 Rails 控制台中我可以加载图像,然后设置密度,如果我检查它,它会告诉我密度(最初是 300x300)现在是 200x200,但是当我将其写入文件时,分辨率是 300x300。

我成功更改分辨率的唯一方法是创建一个具有相同宽度和高度的新图像,然后覆盖原始图像。然而,无论我使用什么设置,这都会扭曲输出(我尝试将原件设置为完全不透明,将“新”设置为完全透明,甚至使用 CopyCompositeOperation,它应该完全替换“新”图像)。

我试过这样设置密度:

image.density = "200"

像这样

image.write("test.jpg") {self.density="200"}

两者都有。

没有任何效果...有什么想法吗?

要明确...我不想调整图像大小,我想更改打印分辨率。我希望尺寸保持不变(即宽度/高度不应改变)。

【问题讨论】:

  • density 用于缩放到打印中的实际尺寸,它不影响像素尺寸。看resize -> imagemagick.org/RMagick/doc/image3.html#resize
  • 你把它弄反了......我不想调整它的大小。我想改变现实世界的印刷尺寸。
  • 好的,抱歉。你的语法image.write("test.jpg") {self.density="200"} 对我有用。你可以试试image.write("test.jpg") { self.units= Magick::ResolutionType::PixelsPerInchResolution; self.density="200" } - 我隐约记得我需要在 Perl 中做类似的事情(这可能是特定于版本的问题)。
  • 为了进行比较,我在 Mac OSX 10.8、ImageMagick 6.8.6-3 2013-08-10 Q16、RMagick 2.13.2 上进行了测试,尝试了三种不同的密度值、代码的变化(带引号和不带引号),并验证了预期的图像像素- 在所有情况下使用 GIMP 和 Apple 的 Preview 应用程序,每英寸。
  • 我在 Amazon Linux 上运行它,使用 yum 安装的 ImageMagick 版本,这有点旧。我试图避免手动编译它(所以更新会通过 yum 显示),但我可能需要自己做。我已经通过 RMagick 和命令行(即转换)尝试了我能想到的所有变体(包括你所说的),但它完全忽略了它。我会尝试删除当前版本并手动编译它以查看是否有效。

标签: ruby-on-rails ruby imagemagick rmagick


【解决方案1】:

这是 AWS 在其存储库中的 ImageMagick 版本的问题。删除该版本并从源代码安装使密度设置起作用。此外,如果您希望在 Windows 应用程序中反映分辨率更改,则需要从图像中去除“8bim”配置文件:

image.profile!("8bim",nil)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多