【每周一坑】生成九宫格图片

简介: 非常简单的功能,但在开发中很常见,很多网页/应用里缩略图都是对图片进行缩放+切割得到的。

我们的每N周一坑栏目又来了。


之前我们有过和图像处理相关的题目:

【每周一坑】用代码给图片配上文字

【每周一坑】缩小图片尺寸


今天再来一个和图片有关的:图片切割


非常简单的功能,但在开发中很常见,很多网页/应用里缩略图都是对图片进行缩放+切割得到的。

增加一点点趣味性,我们的要求是:


把一张图片切成 3 x 3 九张小图


这样就可以把它们发在朋友圈重新组成一张大图了。


示例:原图



效果



当然,原图是正方形效果最好。


附加题


  1. 对于不是正方形的原图,截取中间尽可能大的正方形区域,再分割成九张小图(需考虑长>宽和长<宽两种情况)
  2. 切图时将朋友圈小图之间的间隔考虑进去,使拼接出的大图看起来更连续


提示:仍然用之前提到过的 PIL 库,里面的 crop 方法即可实现(py3 安装包名为 pillow)。


参考代码将在下周给出,或看看其他同学在留言中提交的代码。


期待各位同学提交解答。


提交代码可以使用 paste.ubuntu.com

codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。


往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。


【解答】蜥蜴流感与贝叶斯定理


案例本身是一个典型的条件概率,用贝叶斯定理即可算出概率,概率统计的书籍和网上都可以搜到详细解释。


P = (0.01 * 0.9) / (0.01 * 0.9 + (1 - 0.01) * 0.09)

= 0.0917


而我们的问题是要模拟这个场景。所以我们可以循环10万次,用 random 模块根据已知的概率来“产生”病例和阳性结果,并统计最终实际的阳性患病率。


给出一份参考代码:


import random
# 定义个体
class Man:
    flu = False #是否患病
    test = False #是否阳性
# 产生10万个体,随机患病和检测状况
all_people = []
for i in range(100000):
    m = Man()
    # 患病概率
    if random.random() < 0.01:
        m.flu = True
    # 真阳性概率
    if m.flu and random.random() < 0.9:
        m.test = True
    # 假阳性概率
    if not m.flu and random.random() < 0.09:
        m.test = True
    all_people.append(m)
# 统计个数
positive_people = [m for m in all_people if m.test]
print(len(positive_people))
positive_flu = [m for m in positive_people if m.flu]
print(len(positive_flu))
# 实际患病者在阳性者中的比例
print(len(positive_flu)/len(positive_people))


这里先模拟生成了10万份数据,然后统计结果。当然也可以边生成边统计,@Mr. wang、@铭记、@L、@杀哥 就是用的类似方法,有的写得比我还更简洁。


同时提交解答的还有 @Jzy、@灿夜、@冬日炎炎。感谢各位同学的参与,希望下次继续。


期待在下一期中看到你的代码!


  • 如需了解视频课程及答疑群等更多服务,请号内回复 码上行动
  • 代码相关问题可以在论坛上发帖提问 bbs.crossincode.com

推荐阅读:

朋友圈 |电影票 | 百万关注 | 技术宅 | 火车票 | 单词表 | 押韵工具 | 新手建议 | 就业 | 知乎 | 排序

相关文章
|
JSON 分布式计算 数据处理
加速数据处理与AI开发的利器:阿里云MaxFrame实验评测
随着数据量的爆炸式增长,传统数据分析方法逐渐显现出局限性。Python作为数据科学领域的主流语言,因其简洁易用和丰富的库支持备受青睐。阿里云推出的MaxFrame是一个专为Python开发者设计的分布式计算框架,旨在充分利用MaxCompute的强大能力,提供高效、灵活且易于使用的工具,应对大规模数据处理需求。MaxFrame不仅继承了Pandas等流行数据处理库的友好接口,还通过集成先进的分布式计算技术,显著提升了数据处理的速度和效率。
ly~
|
供应链 搜索推荐 大数据
大数据在零售业中的应用
在零售业中,大数据通过分析顾客的购买记录、在线浏览习惯等数据,帮助零售商理解顾客行为并提供个性化服务。例如,分析网站点击路径以了解顾客兴趣,并利用历史购买数据开发智能推荐系统,提升销售和顾客满意度。此外,大数据还能优化库存管理,通过分析销售数据和市场需求,更准确地预测需求,减少库存积压和缺货现象,提高资金流动性。
ly~
1102 2
|
安全 关系型数据库 MySQL
Windows Server 安装 MySQL 8.0 详细指南
安装 MySQL 需要谨慎,特别注意安全配置和权限管理。根据实际业务需求调整配置,确保数据库的性能和安全。
1109 9
|
12月前
|
存储 安全 数据管理
区块链在医疗数据管理中的应用:安全与隐私的新纪元
区块链在医疗数据管理中的应用:安全与隐私的新纪元
845 16
|
传感器
示例四、 开关式霍尔传感器测转速
示例四、 开关式霍尔传感器测转速
856 0
示例四、 开关式霍尔传感器测转速
|
Web App开发 JSON JavaScript
Chrome 插件各模块之间的消息传递
Chrome 插件各模块之间的消息传递 一、消息传递 1. 消息传递分类 Chrome 插件的 Action、Background 和 content_script 三个模块之间的信息传输 插件和插件之间的信息传输 网页向插件进行信息传输 与原生应用进行消息传递
927 0
|
数据可视化
R语言极值推断:广义帕累托分布GPD使用极大似然估计、轮廓似然估计、Delta法
R语言极值推断:广义帕累托分布GPD使用极大似然估计、轮廓似然估计、Delta法
|
Kubernetes 监控 负载均衡
10个最佳的Kubernetes工具
Kubernetes生态工具整理
1580 0
10个最佳的Kubernetes工具
|
算法 安全 数据格式
几行代码实现CRC循环冗余检验
几行代码实现CRC循环冗余检验
10559 0
几行代码实现CRC循环冗余检验
|
JavaScript 开发工具 git
Element-ui中 表格(Table)组件中 toggleRowSelection 方法设置默认多选项 无法选中解决思路
Element-ui中 表格(Table)组件中 toggleRowSelection 方法设置默认多选项 无法选中解决思路
2012 0
Element-ui中 表格(Table)组件中 toggleRowSelection 方法设置默认多选项 无法选中解决思路