别在@官方加国旗啦,3分钟30行Python代码帮你搞定!还加鸡腿,加IPhone11!

最近的一周里,小编的朋友圈被大家刷屏了,大家都在@微信的官方,想让官方为大家的头像上插入一面国旗,为祖国的70大寿祝贺
小编也凑热闹加入了大军,但是既然咱们会Python,为什么不自己做一个呢,于是小编今天也编写了一个简易的制作“贴画头像”的程序!

 

该程序不仅仅可以为大家制作不同的头像贴画,而且还可以为大家制作不同位置的头像贴画,例如你想将贴画放在头像的不同的角落里,程序都可以帮你实现。话不多说,开始动手。

 

程序一共只有短短的30行代码,但是他实现的功能可是不少,部分程序如下图所示。
from scipy.misc import imread, imresize, imsave
import glob

def add_icon():
    head_pic = imread('./pics/head.jpg')
    icon_pic = imread('./pics/{}.jpg'.format(pic_name)) # 读取图标
    # 获取头像和图标的长宽
    head_w, head_h = head_pic.shape[:2]
    icon_w, icon_h = icon_pic.shape[:2]
    # 计算图案缩放比例
    if icon_w > icon_h:
        icon_pic = imresize(icon_pic, (head_w, int(icon_w/icon_h*head_h)))
    else:
        icon_pic = imresize(icon_pic, (head_h, int(icon_h/icon_w*head_w)))
    print(icon_pic.shape)
    # 缩放图案
    icon_w, icon_h = icon_pic.shape[:2]
    icon_pic = imresize(icon_pic, (int(icon_w/ 6), int(icon_h / 6)))

    icon_w, icon_h = icon_pic.shape[:2]
    print(icon_pic.shape[:2])

    if postion_name == "topleft":
        head_pic[:icon_w, :icon_h, :] = icon_pic[:, :] # 左上角
    elif postion_name == "topright":
        head_pic[-icon_w:, :icon_h, :] = icon_pic[:, :] # 右上角
    elif postion_name == "bottomleft":
        head_pic[:icon_w, -icon_h:, :] = icon_pic[:, :] # 左下角
    else:
        head_pic[-icon_w:, -icon_h:, :] = icon_pic[:, :] # 右下角

(代码左右滑动看)

 

  • 上图程序中,我们首先选择输入要使用哪一种贴画;

  • 然后输入我们要将贴画放置的位置,分别是左上角,左下角,右上角和右下角;

  • 接着设置完成后,我们读入选择的贴画,然后根据贴画的长宽比例进行缩放,目的是为了贴画更加的自然美观;

  • 记得我们调整贴画的尺寸为其大小的六分之一;

  • 最后将其复制到我们的头像图画上,整个程序便得以顺利的完成;

 

下面我们给出的是成果的展示:

别在@官方加国旗啦,3分钟30行Python代码帮你搞定!还加鸡腿,加IPhone11!

 

我们选择了四个不同的贴画,分别是两部新出的手机,还有大鸡腿以及五星红旗。至于设置的位置,小编统一的选择了左上角,大家如果觉得不喜欢的话,可以选择其他的角落进行放置。同样会有不错的效果。

 

建议大家修改一下文件的Path,加入下面两行,以方便运行代码:

别在@官方加国旗啦,3分钟30行Python代码帮你搞定!还加鸡腿,加IPhone11!

 

别在@官方加国旗啦,3分钟30行Python代码帮你搞定!还加鸡腿,加IPhone11!

别在@官方加国旗啦,3分钟30行Python代码帮你搞定!还加鸡腿,加IPhone11!

别在@官方加国旗啦,3分钟30行Python代码帮你搞定!还加鸡腿,加IPhone11!

上面的图标周围没有白边距,我们这次修改一些代码,加上20像素的留边,这样更好看一些。

if postion_name == "topleft":
        head_pic[:icon_w+20, :icon_h+20, :] = np.ones_like(head_pic[:icon_w+20, :icon_h+20, :]) * 255
        head_pic[10:icon_w+10, 10:icon_h+10, :] = icon_pic[:, :] # 左上角
    elif postion_name == "topright":
        head_pic[:icon_w + 20, -icon_h - 20:, :] = np.ones_like(head_pic[:icon_w + 20, -icon_h - 20:, :]) * 255
        head_pic[10:icon_w + 10, -icon_h - 10:-10, :] = icon_pic[:, :] # 右上角
    elif postion_name == "bottomleft":
        head_pic[-icon_w - 20:, :icon_h + 20, :] = np.ones_like(head_pic[-icon_w - 20:, :icon_h + 20, :]) * 255
        head_pic[-icon_w - 10:-10, 10:icon_h + 10, :] = icon_pic[:, :] # 左下角

    else:
        head_pic[-icon_w-20:, -icon_h-20:, :] = np.ones_like(head_pic[-icon_w-20:, -icon_h-20:, :]) * 255
        head_pic[-icon_w-10:-10, -icon_h-10:-10, :] = icon_pic[:, :] # 右下角
   
    plt.imshow(head_pic)
    plt.show()

(代码左右滑动看)

我们以“topleft”为例:
  • 上述的程序中,我们首先以图标的尺寸为基础,长和宽各扩充20个像素,填充为白色;
  • one_like函数的目的就是创造一个数值全部为1的矩阵,矩阵的大小为head_pic[:icon_w+20, :icon_h+20, :];
  • 然后我们再将图标放置到白色的背景上去,图标距离白色背景的边缘为10个像素。
  • 看一些效果:

别在@官方加国旗啦,3分钟30行Python代码帮你搞定!还加鸡腿,加IPhone11!

以上的头像设置是不是感觉非常的不错呢,相比于微信官方给出的头像,我们的设计是不是显得更加的灵活呢,大家也赶快动手制作属于自己的头像吧,冲鸭!

 

后台输入:【国庆】,直接拿走全部源码和素材图片,拿走不谢!

 

往期热门:

隔壁的女神,老是对我笑?啥意思呢,我就用Python来分析一下

漫画,开学季来临,用Python告诉你,女朋友应该从全国的哪个城市找

天下武功为快不破,戏说Python与Go高并发争锋!

 

获取干货源码,阅读更多有趣的案例,也可以直接去微信公众号【菜鸟学Python】获取。
菜鸟学Python » 别在@官方加国旗啦,3分钟30行Python代码帮你搞定!还加鸡腿,加IPhone11!