【问题标题】:tiff() resolution and compression are not reliably set in OSXtiff() 分辨率和压缩在 OSX 中没有可靠地设置
【发布时间】:2013-06-20 15:55:06
【问题描述】:

tiff() 中的分辨率和压缩选项在我的系统上似乎被忽略了(请参阅下面的信息)。这似乎与this SO question 中讨论的问题相同;我在此处发布问题,以便更具体地了解我的系统。

比如下面的代码,

x <- rnorm(1000)
tiff("example.tiff", height=3, width=5, units="in", res=200, compression="lzw")
hist(x)
dev.off()

生成的 .tiff 文件表面上看起来不错,但是当我使用 Photoshop 查看图像大小时,我看到了这个

这与tiff() 创建具有正确像素数但以英寸为单位的大小错误的文件一致。 (当我想控制图像的字体大小和图像大小时,这种差异给我带来了麻烦,例如对于需要特定物理图像大小的出版物)。

请注意,该文件也是 2.5 MB,对于 3"×5" 黑白 lzw 压缩的 tiff 来说似乎太大了。我怀疑压缩选项也被忽略了。

ggsave(可能依赖于 tiff() ?)和png() 得到了相同的结果,所以这似乎是 R 和 OSX 处理图像文件的方式的普遍问题。

我正在使用 R Studio 0.97.449,在 OSX 10.8 上使用 R 3.0.0,详情如下。

> sessionInfo()
R version 3.0.0 (2013-04-03)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.0.0

【问题讨论】:

    标签: image r tiff


    【解决方案1】:

    我使用与您相同的 R 和 OS X 版本。当我运行您的示例然后使用 ImageMagick 调用图像详细信息时,我在控制台中看到以下内容(已编辑):

    $ identify -verbose /Users/schaunw/Desktop/example.tiff
    Image: /Users/schaunw/Desktop/example.tiff
    Format: TIFF (Tagged Image File Format)
    Class: DirectClass
    Geometry: 1000x600+0+0
    Units: PixelsPerInch
    Type: GrayscaleAlpha
    Endianess: MSB
    Colorspace: Gray
    Depth: 8-bit
    Page geometry: 1000x600+0+0
    Dispose: Undefined
    Iterations: 0
    Compression: None
    Orientation: TopLeft
    Filesize: 2.402MB
    Number pixels: 600K
    

    文件大小,正如您所指出的,如果对于应该很小的图像来说相当大,并且它显示出缺乏压缩。当我尝试更改 tiff 函数中的 type 参数时,该问题的答案就显现出来了:OS X 告诉我它不再支持 X11,如果我想使用它,我需要手动安装它(见http://www.macrumors.com/2012/02/17/apple-removes-x11-in-os-x-mountain-lion-shifts-support-to-open-source-xquartz/)。

    所以我安装了它,然后再次运行您的示例代码,但这次将type 设置为“cairo”。这是我后来从 ImageMagick 得到的:

    $ identify -verbose /Users/schaunw/Desktop/example.tiff
    Image: /Users/schaunw/Desktop/example.tiff
    Format: TIFF (Tagged Image File Format)
    Class: DirectClass
    Geometry: 1000x600+0+0
    Resolution: 200x200
    Print size: 5x3
    Units: PixelsPerInch
    Type: Grayscale
    Endianess: MSB
    Colorspace: Gray
    Depth: 8-bit
    Page geometry: 1000x600+0+0
    Dispose: Undefined
    Iterations: 0
    Compression: LZW
    Orientation: TopLeft
    Filesize: 19.8KB
    Number pixels: 600K
    

    请注意适当的小文件大小和 LZW 压缩,但也请注意这次 ImageMagick 明确声明打印大小为 5x3。它以前没有这样做。

    所以看起来您的问题与不再随 X11 一起提供的 OS X 有关。安装 X11 应该可以解决您的问题。

    【讨论】:

    • 这对我来说并不正确,因为您需要设置 type = "X11" 才能使用 X11 图形设备。
    • tiff 的文档仅列出了“cairo”、“Xlib”、“quartz”作为type 的有效选项。当我在安装 X11 之前尝试使用“cairo”或“Xlib”时,OS X 给了我一个弹出窗口,告诉我我需要安装 X11。当我使用“石英”时,它没有这样做。所以我假设“quartz”是最新版本的 OS X 上tiff 的默认值,并且“cairo”和“Xlib”都需要 X11。无论如何,在安装 X11 后,使用“cairo”可以得到想要的结果。
    • 安装 X11 似乎并没有改变任何东西。我只是在这里下载并运行了 .dmg 文件:xquartz.macosforge.org/landing。还有什么比这更重要的吗?
    • 拨打tiff("example.tiff", height=3, width=5, units="in", res=200, compression="lzw", type = "cairo")会发生什么? (注意 type 参数与原始代码中的不同)。
    • 根据cairographics.org的说法,cairo同时支持X Window系统和Quartz,所以不清楚type = "cairo"为什么会自动使用X11。出于好奇,如果你使用type = "Xlib" 会发生什么?至于您的其他问题,我同意@hadley 更适合回答,但在您的情况下,ggsave 似乎只是tiff 的包装,在这种情况下,您应该能够将type 参数包含在你的电话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多