作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 OpenImageIO 和 python 进行一些额外处理后调整图像大小。然而这个过程似乎并不像PIL那么容易。在 PIL 中,我可以提供一个新的分辨率,例如 512 x 512,它会调整我的图像大小,无论其当前像素方面如何,并调整其大小以适应其最大长度,以便它适合在 512x512 盒子内。我如何使用 OpenImageIO 来做到这一点?
目前,这只会拉伸(stretch)图像以适合 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)
最佳答案
为简单起见,我们假设图像原点为 (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 时,我使用了原始文件的 channel 数和数据格式,这比像在原始文件中那样将其硬编码为 3 channel 浮点更稳健。
关于python - 使用 Python OpenImageIO 调整图像大小并保持纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50914650/
我有一张 table 。我希望它的数据垂直和水平居中。 我使用了 align="center"valign="middle" ,但它没有用。
我是一名优秀的程序员,十分优秀!