【问题标题】:Rescaling an image with libvips使用 libvips 重新缩放图像
【发布时间】:2019-05-23 16:14:04
【问题描述】:

我有一张6130x5548 pixels 的图像,我想重新缩放它,使最长边为32768 pixels(然后做一个具有 7 个缩放级别的图块金字塔)。我不明白vips resize 是这样的明显方式,因此我尝试了下面的行

vips resize image_in.tif img_rescaled.tif 5.345513866231648

数字5.34551 只是32768/6130 的比率,我的x axis 的比例因子。如果我想指定返回图像的确切尺寸(以像素为单位),我该怎么做?

我尝试为此目的使用vips thumbnail,我不知道这是否被推荐,但它确实有效。

vips thumbnail image_in.tif img_rescaled.tif 32768

请问这样可以吗?

这两种方法在 MB 大小方面也给出了完全不同的输出。当vips thumbnail 产生一个大小为2.8Gbtif 时,vips resize 调用返回一个大小为1.8Gbtif

两张图像(显然)具有相同的尺寸32768x29657 pixels,相同的分辨率72dpi,但不同的bit depthvips thumbnailtif 具有24 bit depth,而来自vips resize16 bit depth 的图像具有24 bit depth。原图有bit depth=16

另外,我知道vips translate 使用的算法对生成的文件大小起着重要作用。请问vips thumbnail和/或bit depth可以设置算法吗?

【问题讨论】:

  • 你能解释一下为什么在金字塔之前你需要放大六倍吗?你会得到非常模糊的像素。 vipsthumbnail 应该用于制作图像缩略图,因此它将大多数图像转换为 sRGB 以供 jpeg 保存。
  • 我有大约 300K 点要绘制在图像上。除非你放大比 5 级更深的东西,否则你只会看到一大块标记。理想情况下,我想达到 8 级,但 7 级是一个很好的折衷方案。背景图像的质量也不是最重要的,我也可以妥协。因此,我可以使用cubic 插值而不是lanczos,这将导致文件大小略小,甚至averagenearest 等在质量方面要差很多,但文件大小也小很多。跨度>
  • 只是为了进一步扩展我上面的评论,如果我理解得很好,除非我的图像至少是 32768 pixels (width or height),否则我无法制作 7 个缩放级别。在这种情况下,在第 7 级,一个单位将对应于 1 个像素。如果有办法拥有units per pixels = 0.5,那么扩展到16384 pixels 对我来说也可以,但我认为vips 不可能做到这一点

标签: image-processing vips


【解决方案1】:

resize 只取一个比例因子,所以需要计算一下。你可以使用类似的东西:

width=$(vipsheader -f width somefile.tif)
height=$(vipsheader -f height somefile.tif)
size=$((width > height ? width : height))
factor=$(bc <<< "scale=10; 32768 / $size")
vips resize somefile.tif huge.tif $factor

我会在升级之前使用 8 位,因为您只需要 8 位来显示。您可以使用:

vips colourspace thing.tif other.tif srgb

制作 8 位 srgb 版本。

当你开始做这样的事情时,bash 变得如此丑陋,以至于我很想切换到 pyvips

import pyvips

image = pyvips.Image.new_from_file('somefile.tif', access='sequential')
image = image.colourspace('srgb')
image = image.resize(32768 / max(image.width, image.height))
image.dzsave('mypyramid')

它还有一个额外的好处是它不会使用任何临时文件。 pyvips 构建图像处理操作的管道,因此该程序将从您的输入中流式传输像素,放大它们,并同时编写金字塔,并且所有这些都是并行的。它不会占用太多内存,而且速度很快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多