gpt4 book ai didi

python - 应用引擎 : Calculating the dimensions of thumbnails to be generated by serving thumbnails from the blobstore

转载 作者:太空狗 更新时间:2023-10-30 01:17:21 26 4
gpt4 key购买 nike

我目前正在使用 blobstore 为图像生成缩略图,但是,我喜欢将缩略图的尺寸存储在 img 标签中,因为这是一种很好的做法,有助于加快渲染和使部分加载的页面看起来更漂亮。

如果只知道原始图像的尺寸,我如何计算 blobstore 生成的缩略图的尺寸?

我以前的尝试不是很准确,大部分时间都偏离一两个像素(可能是由于四舍五入)。

我知道获取缩略图并使用图像 API 来检查尺寸是可行的,但我认为那是低效的。

这是我目前用来计算它的代码,但是,它偶尔会偏离一个像素,导致浏览器稍微拉伸(stretch)图像,导致调整大小的伪影以及性能下降。

from __future__ import division
def resized_size(original_width, original_height, width, height):
original_ratio = float(original_width) / float(original_height)
resize_ratio = float(width) / float(height)
if original_ratio >= resize_ratio:
return int(width), int(round(float(width) / float(original_ratio)))
else:
return int(round(float(original_ratio) * float(height))), int(height)

准确性非常重要!

最佳答案

我看到了问题。原因是C的rint是用来计算的尺寸。 Python 没有等效的 rint 实现因为它被 Rossum 在 1.6 中取出:

http://markmail.org/message/4di24iqm7zhc4rwc

您现在唯一的办法是在 python 中实现您自己的 rint。

默认情况下,rint 执行“四舍五入”,而 pythons 则执行其他操作。这是一个简单的实现(没有针对 +inf -inf 等的边缘情况处理)

import math

def rint(x):
x_int = int(x)
x_rem = x - x_int # this is problematic
if (x_int % 2) == 1:
return round(x)
else:
if x_rem <= 0.5:
return math.floor(x)
else:
return math.ceil(x)

上面的代码理论上应该是这样实现的。问题在于x_rem。 x - x_int 应该得到小数部分,但你可以得到分数 + 增量。因此,您可以根据需要尝试添加阈值

import math

def rint(x):
x_int = int(x)
x_rem = x - x_int
if (x_int % 2) == 1:
return round(x)
else:
if x_rem - 0.5 < 0.001:
return math.floor(x)
else:
return math.ceil(x)

这边。我硬编码了一个 0.001 阈值。阈值本身是有问题的。我想你真的需要尝试一下 rint 实现并适应它到您的应用程序,看看什么最有效。祝你好运!

关于python - 应用引擎 : Calculating the dimensions of thumbnails to be generated by serving thumbnails from the blobstore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5079471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com