0


如何通过Python制作日历壁纸

自从看了冬奥会的开幕式,二十四节气的倒计时,祖国大好河山,美轮美奂,于是想搜索个图当壁纸。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_14,color_FFFFFF,t_70,g_se,x_16

作为一个有追求的程序员,更是个实用主义的人,要是壁纸上能加个日历就更好了。

将日历P上去?

小了,格局小了,作为程序员,我肯定是让程序生成一个的。

Flag是立了,草率了,活儿是挺多的。

得搞个万年历吧,看上去so easy!

不知道啥算法,百度里倒是能找出很多,五花八门。

后来,我查看了和万年历网页源码,反复研究了javascrip的实现方式。

leapDays:function(y) {

if(calendar.leapMonth(y)) {

return((calendar.lunarInfo[y-1900] & 0x10000)? 30: 29);

}

return(0);

},

其实,计算农历日期大多都是通过枚举日期数据的,而且大多都只能算到2050年。

作为优秀的程序员,我怎么可能满足于2050年,还说“万年”历呢!

好家伙,这水越趟越深了,直到我找到了一个较ephem的库。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_15,color_FFFFFF,t_70,g_se,x_16

以为很顺利的,谁知ephem这货是研究天文星体的。当然研究天文的东西,肯定可以算日期,包括农历天干地支等。

越看越糊涂,好想放弃,但是又不甘心,退回枚举的方法吧,又觉得太low了。

突然感觉自己是个倔强的程序员……

好了,在我日夜奋战努力专研攻克下,还真让我做出来了。

(中间省略1M个字……)

这么好的东西,取个名字吧,英文就叫CalendarWallpaper吧,缩写CalWp。

中文呢,万年历壁纸生成器,简称“万年壁”?呃……太俗了!

日历壁纸生成器,简称“日壁”?

……

算了,以后有灵感了再取名。

作为实用主义的优秀程序员,名字啥的都有点浮云。

先验证下功能!

1. 日历时间范围

我追求的目标是“上下五千年”,先挑几个时间点看看。

首先,来个大唐王朝的时间755年

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_20,color_FFFFFF,t_70,g_se,x_16

还行嘛!

再来个《三体》世界里的年代,2205年水滴对地球舰队发起攻击。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_20,color_FFFFFF,t_70,g_se,x_16

其实,听说ephem可以算任意日期,我有点不信,不过我没验证出溢出问题。这个库有个儒略日的概念,儒略日起于公元前4713年。往后呢,都是推算的,反正我输入很长的年份都能得到结果……

2. 日历在壁纸的位置

为了适合各种小伙伴各种追求,支持九个位置。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_18,color_FFFFFF,t_70,g_se,x_16

程序输入对应位置名称即可匹配。

3. 壁纸大小问题

目前支持电脑的宽屏,1280*720,2K,4K甚至8K的图都能很好适配。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_14,color_FFFFFF,t_70,g_se,x_16

手机屏幕尺寸的呢?目前没有,计划适配。

竖屏壁纸自动适配还在研究中。

4. 日历的周数和周一还是周日是第一天问题

有小伙伴可能是项目管理人员,喜欢关注周数,即当前周是这年的第几周。

有,通通满足你。

不过这里周数的定义没有统一的标准,比如每年的1月1日算第几周问题?目前很多公司都不一样,尽管现在有个ISO-8601的标准。

不过没关系,我提供参数让你们选,你说1月1是第一周可以,定义为ISO的标准也行。

来,我们先看看效果;

下图左边日历效果是将1月1日定为第一周,周一是每周的第一天的效;

右边日历是将1月1日定为ISO周数规则,并设置周日为一周的第一天的效果。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_20,color_FFFFFF,t_70,g_se,x_16

5. 色调和底色问题

有的软妹子程序媛喜欢淡淡的小清新壁纸,有的资深老手攻城狮喜欢深色神秘的壁纸。

都满足你们,这有两种色调四种配置。

这个配置解释比较废口水,看下图,你们对比下就能明白。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_19,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_20,color_FFFFFF,t_70,g_se,x_16

6. 在线壁纸适配

论壁纸,肯定有小伙伴会盯上Bing搜索主页的背景图,每日一图,还不重样。

这点小心思,我懂,通通安排。支持在线获取当天Bing主页图当壁纸。

还不满足?好了,除了当天的,昨天的前天的大前天的……通通支持(最大可支持向前6天图片)!

说了这么多,来个效果图看看

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_20,color_FFFFFF,t_70,g_se,x_16

7. 显示整年日历

通过--wholeyear选项可以输出整年日历壁纸(需要V1.1版本或以上才支持),例如

CalWp.exe --wholeyear --dispwk --wknum=1

可以得到以下效果壁纸

8.横向日历显示

通过--horizon选项可以输出横向日历壁纸(需要V1.2版本或以上才支持),例如

CalWp.exe --horizon -i pic.jpg --anchor=top

可以得到以下效果壁纸

9. 如何获得这个软件

上面说的天花乱坠的,要亲自试试才真的知道好不好。

那么,怎么获得这个软件呢?

关注公众号“嵌入式软件实战派”,聊天界面回复“CalWp"或者”日历壁纸“即可获得下载链接。

或者通过点击该CSDN链接[CalendarWallpaper日历壁纸]下载。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP6L2v5Lu25a6e5oiY5rS-,size_16,color_FFFFFF,t_70,g_se,x_16

8. 注意事项

日历壁纸生成软件开放给大家做学习研究使用,未经允许,不得挪作他用。

制作的壁纸也要注意图片版权问题,不要乱做商业用途哦。

如果你有其他疑问、建议或者其他奇思妙想,可以在公众号对话框留言,或者发邮件给我。

标签: python

本文转载自: https://blog.csdn.net/lianyunyouyou/article/details/123174570
版权归原作者 嵌入式软件实战派 所有, 如有侵权,请联系我们删除。

“如何通过Python制作日历壁纸”的评论:

还没有评论