- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在使用 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/
Serv-U 密匙冲突,Serv-U无法启动处于离线状态解决方法 大家也许会遇到,在服务器上安装SERV-U时会出现密匙冲突提示。就算汉化时钩选破解也没有用。去网上找,很多密匙要么快过期了,要么没
How can I properly simulate a cloud function locally so that it has all data as when being invoked o
我一直在使用 Angular2 进行 Web 开发,并且一直在使用 Angular2 和 Firebase 来运行本地服务器。在使用Ionic创建服务器时,我一直没能找到类似于键入quit的命令,因此
我正在尝试使用 --serve-path 在该路径下为我的整个应用程序提供服务。例如,我希望我的路径是 localhost:4200/foobar 我使用 ng serve --serve-path=
目前正在学习Jekyll,一个建站框架,不知道bundle exec jekyll serve和jekyll serve有什么区别。两者的行为似乎相同。 最佳答案 两个字: bundle exec j
很快,我在 ng serve 上有一个 4.6MB 的应用。 当我这样做时: ng serve --prod 我得到 1MB 的文件大小。 但是,--prod 以某种方式使我的整个应用程序中断。 我向
您好,我正在尝试构建我的 React 应用程序,所以我做了 yarn build它创建了必要的文件夹,现在我正在尝试做 serve -s build它告诉我下面的错误 ** 我尝试通过 npm uni
我用过 ionic serve并得到以下回复,我没有三思而后选择 localhost .但是现在我想使用选项 1。Ionic 记住了我的选择,例如 ionic serve从不允许我再选择并使用 loc
将图像(例如)保存在内存中而不是从静态 Assets 中提供它们是否值得? 频繁请求的静态资源会保留在内存中吗? 谁能告诉我性能影响? 最佳答案 除非您以每秒数千的速度为用户提供服务,否则我怀疑它会产
我的理解是,我应该能够从 Google 的 AI Hub 中获取 TensorFlow 模型,将其部署到 TensorFlow Serving 并使用它通过使用 curl 的 REST 请求发布图像来
我正在使用 Angular 7,我想知道是否 ng serve --prod 与相同 ng serve -c production 在文档中找不到,所以任何帮助将不胜感激 最佳答案 这里有一些文档:h
使用 struts.serve.static=true 和 struts,serve.static.browserCache=false 标记的浏览器缓存不起作用我有一个要求,即使用户注销并单击后退按
它曾经可以工作,但是当我重新启动我的电脑时,它就不再工作了。 nodejs目录设置在Path环境变量中。我尝试重新安装 nodejs。我还尝试卸载 @vue 文件夹,以管理员身份运行我的 git ba
互联网的应用已经波及了我们的方方面面,那么加快对于网络的学习也是必要的。所以今天我们来介绍一下Serv-U的FTP服务器的架构。本文将结合Serv-U这一功能强大,界面友好,易学易用的FTP服务器端
注意:上面是FTP服务器端建立FTP用户的教程,建立FTP用户我们需要通过FTP客户端连接服务器的FTP,从而使用FTP上传文件到服务器或下载
前言: 大家应该都还没有忘记三年前在Serv-U5.004版的之前所有版本的"Serv-U FTPMDTM命令缓冲区溢出"与"Serv-U FTP服务器LIST命令超长
比起IIS来,Serv-U的管理功能强大得多,而且设置也很方便。需要特别注意的是每进行任何一次设置或改动,都要点击界面左上角工具条的“保存”按钮才能生效。 1.账户管理 Serv-U对账户的管理
Serv-U FTP Server是一种被广泛运用的FTP服务器端软件,可以设定多个FTP服务器、限定登录用户的权限、登录主目录及空间大小等,功能非常完备.具有非常完备的安全特性,支持SSl FT
我是 Angular 的新手,我克隆了一个 repo (angular-slider)。我的问题是,当我输入控制台 grunt serve 时,它显示警告:找不到任务“服务”。使用 --force
我正在使用运行 Node v8.11.3 的 Gatsby v1.1.52。 当我跑 gatsby serve我收到一条消息,提示我有一个 UPDATE AVAILABLE: The latest v
我是一名优秀的程序员,十分优秀!