image-processing - 使用 libvips 重新缩放图像

标签 image-processing vips

我有一张图片是 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产生 tif与尺寸 2.8Gb vips resize调用返回 tif与尺寸 1.8Gb .

两个图像(显然)具有相同的尺寸 32768x29657 pixels , 相同分辨率 72dpi但不同 bit depth tif来自 vips thumbnail24 bit depth而来自 vips resize 的那个16 bit depth .原图有bit depth=16 .

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

最佳答案

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 构建图像处理操作的管道,因此该程序将从您的输入中流式传输像素,放大它们,并同时并行地编写金字塔。它不会使用太多内存,而且速度很快。

关于image-processing - 使用 libvips 重新缩放图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56279280/

相关文章:

java - cvHaarDetectObjects() 方法有什么作用?

android - 裁剪 YUV 图像

python - pyvips 图像合成未按预期工作

linux - 如何在 Alpine 3.8 上安装 libvips?

image - Matlab - 注册和裁剪来自两个不同来源的对齐图像

javascript - 在 Node js 中将 360 度 View 转换为等距柱状 View ?

php - 将不透明像素转换为黑色

image - 处理 150GB .jp2 图像

go - 在 Go 中给定多个 URL 参数的过程图像