如何用Python代码发一个炫酷的朋友圈

时间:2022-05-26 05:59:33

如何用Python代码发一个炫酷的朋友圈

相信很多朋友在发朋友圈的时候,都会发一些话语,有些还会配一张图,但是普通的配图怎么符合我们程序员的身份呢?发出去都觉得没牌面,应该整点技术性的活。

今天给大家带来一个项目,这个小项目只用50行代码就能实现,它的名字叫做PIL(Python Image Library)。

其实这个项目要做的事情很简单,就是把原来的一张图切图,变为9张图,看着就有牌面了,成功霸屏。

如何用Python代码发一个炫酷的朋友圈

那有的朋友就会问了,这也只是正方形的图片,那我的图片要是很长或者很宽,切不了9张图,那怎么办?

其实很简单,只要把高和宽计算出来,然后取最大值就可以了,比如下面这一张Python图片:

如何用Python代码发一个炫酷的朋友圈

就可以构造出一张正方形的图片啦

如何用Python代码发一个炫酷的朋友圈

当然,想把一张图片做成这样子也很容易啦,现在很多手机上的图片处理软件都能实现。

其实这个小程序的开发思路也很简单,用图片展示给大家康康:

如何用Python代码发一个炫酷的朋友圈

对应代码如下:

  1. #-*-coding:utf-8-*-
  2. '''
  3. 将一张图片填充为正方形后切为9张图
  4. '''
  5. fromPILimportImage
  6. importsys
  7. #将图片填充为正方形
  8. deffill_image(image):
  9. width,height=image.size
  10. #选取长和宽中较大值作为新图片的
  11. new_image_length=widthifwidth>heightelseheight
  12. #生成新图片[白底]
  13. new_image=Image.new(image.mode,(new_image_length,new_image_length),color='white')
  14. #将之前的图粘贴在新图上,居中ifwidth>height:#原图宽大于高,则填充图片的竖直维度
  15. #(x,y)二元组表示粘贴上图相对下图的起始位置
  16. new_image.paste(image,(0,int((new_image_length-height)/2)))
  17. else:
  18. new_image.paste(image,(int((new_image_length-width)/2),0))
  19. returnnew_image
  20. #切图
  21. defcut_image(image):
  22. width,height=image.size
  23. item_width=int(width/3)
  24. box_list=[]
  25. #(left,upper,right,lower)foriinrange(0,3):#两重循环,生成9张图片基于原图的位置forjinrange(0,3):
  26. #print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))
  27. box=(j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)
  28. box_list.append(box)
  29. image_list=[image.crop(box)forboxinbox_list]
  30. returnimage_list
  31. #保存
  32. defsave_images(image_list):
  33. index=1
  34. forimageinimage_list:
  35. image.save('./result/python'+str(index)+'.png','PNG')
  36. index+=1
  37. if__name__=='__main__':
  38. file_path=<spandata-raw-text="""=""data-textnode-index="116"data-index="1619"class="character">"python.jpeg<spandata-raw-text="""=""data-textnode-index="116"data-index="1631"class="character">"
  39. image=Image.open(file_path)
  40. #image.show()
  41. image=fill_image(image)
  42. image_list=cut_image(image)
  43. save_images(image_list)

相信大家看了代码就知道是怎么实现的了吧,代码中可能比较难理解的地方二胖也给出了相应的注释,大家赶快把代码下载下来拿去跑一跑。

原文地址:https://mp.weixin.qq.com/s/Ioa-o5rwqDUt1QrKOw-AFQ