在使用OpenImageIO和python进行了一些额外的处理之后,我正在尝试调整图像的大小。然而,这个过程似乎不像PIL那么容易。在PIL中,我可以提供一个新的分辨率,例如512 x 512,它将调整我的图像大小,而不管它当前的像素方向,并调整它的大小以适应它的最大长度,以便它适合在512x512框内。我如何使用OpenImageIO来完成这个任务呢?
目前,这将只是拉伸图像,以适应512x512。
因此,有利于宽度的图像应该基于宽度值来匹配:

然而,赞成高度的图像应该基于高度值来拟合:

buf = oiio.ImageBuf(file)
data = buf.spec()
print data.width
print data.height
resized = oiio.ImageBuf(oiio.ImageSpec (512, 512, 3, oiio.FLOAT))
oiio.ImageBufAlgo.resize(resized, buf, roi=oiio.ROI.All, nthreads=4)
resized.write(output)发布于 2018-06-19 17:09:18
为了简单起见,让我们假设图像原点是(0,0) (也就是说,它不是“裁剪”或“过度扫描”图像)。我们可以考虑比它们更宽的图像(“景观”),或者比宽(“肖像”)更长的图像。
我认为您需要这样的东西,它使用目标宽度作为景观,目标高度用于肖像,并在另一个方向重新计算适当的大小:
goal_width = ...
goal_height = ...
buf = oiio.ImageBuf(file)
spec = buf.spec()
w = spec.width
h = spec.height
aspect = float(w) / float(h)
if aspect >= 1.0 :
# source image is landscape (or square)
goal_height = int(h * goal_height / w)
else :
# source image is portrait
goal_width = (w * goal_width / h)
resized = oiio.ImageBuf(oiio.ImageSpec (goal_width, goal_height, spec.nchannels, spec.format))
oiio.ImageBufAlgo.resize(resized, buf)
resized.write(output)这是我的头绪,你应该测试一下,如果我犯了错,你应该调整一下。但这就是要点。
旁白:请注意,当我创建调整大小的buf时,我使用了原始文件的通道数和数据格式,这比对3 chans进行硬编码要健壮一些,就像在原始文件中那样。
https://stackoverflow.com/questions/50914650
复制相似问题