首页 创业资讯正文

9张照片弄成一个九宫格(微信九张照片合成一张)

admin 创业资讯 2021-11-13 13 0

我们很多人每天都用手机刷朋友圈。或许你也注意到了,最近微信朋友圈和微博掀起了一场9方块图的游戏。

  可以说将单个图片,或者说单个动图亦或视频分割成9份发在朋友圈,感觉很有趣。

  今天,博主就通过Python、OpenCV、pyqt5的知识,来帮助大家实现任意图像,视频,动图的9宫格原理。

  文末还有配套生成9宫格的pyqt5的源代码以及exe可运行文件奉上。

  生成9宫格图片

  一般来说,我们生成的9宫格原图必须是正方形的,毕竟朋友圈与微博整体的9宫格就是正方形的。

  但是博主为了9宫格的完备,只需要删除下面一段代码就可以完成任意图形的9宫格,只是大多数平台不支持非正方形的9宫格图片。

  下面,我们直接将一张图片分割成9份,代码如下:

  这里,我们是横切分算法,首先i在j循环结束之前是不会变化的,那么就可以保证前面的切分一直就是三分之一。

  后面的是宽度切分,第1份j=0,后面就是j+1=1为前三分之一,循环一次后j=1,也就是(width,widht*2),最后j=2时,(width*2,width*3)。(把注释中间的代码删除,得到的是任意图形的均分9份)

  i与j的算法同理,原理如下图。记得这里是width,height是整体宽度高度除于3后得到的。

  当然,使用画图工具分割的有点不规则该请见谅,读者可以把其想象成规整的看。同时如果i,j调换位置,那么图片就是竖切分算法。会从左到右,从上到下依次切分。

  生成9宫格动图

  动图可以由两种形式生成:一种是提供一个短视频转换为动图;一种是直接提供一个GIF动图,直接切分。

  短视频生成动图9宫格

  首先,我们来看看,提供一个短视频后切分动图,代码如下:

  其实,可以看出来,中间的切分算法与图片的一模一样。因为视频本身就是由单一的图片构成的。

  这里,我们只要将视频每个图片切分,然后分别存储,等到读取完成之后,将每个部分转换为GIF即可。(至于动图的每帧间隔时间,就是1/视频的FPS)

  GIF直接生成动图9宫格

  对于GIF,OpenCV并没有直接处理动图的函数。所以,最简单的方式,就是通过将动图转换为视频后,在通过上面的代码进行处理。

  代码如下:

  这里就是使用moviepy库将GIF转换为视频后,再通过上面的grid9_gif处理。

  需要注意的是,目前各大平台并不支持动图自动播放,比如微博必须点击动图才能动,如果后续支持动图自动播放,那么这种动图9宫格的切分也能完美实现。目前效果与静态图片一样,只能看到每个动图的第1帧。

  生成9宫格视频

  生成9宫格视频,我们就不必切分了。因为视频本身就是一个整体,没有哪个社交软件,可以同一条朋友圈或者微博发9个视频的。

  所以,我们只需要将视频中间画上4条分割线,就完成了9宫格视频的生成。代码如下:

  代码很简单,就是对每个视频的图片画4条分割线。运行之后,效果如下:

  使用pyqt5打包成exe界面

  对于我们程序员来说,部署的Python环境可以直接运行上面的代码生成你想要的任何9宫格素材。但是对于不是程序员的小伙伴,提供一个可运行的程序,往往体验更加友好。

  这里,博主将通过pyqt5打包上述功能成为GUI界面程序。因为代码过多,对pyqt5感兴趣的可以直接前往github网址下载。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论