520这天,我突然意识到,她根本配不上我这么聪明的男人!
網絡情人節
對于網絡情人節(520),程序員是怎么看待它的呢?
不知道大家是否會期待這天的到來,但對于我這個程序猿來說:
從主觀來講,不放假的節日,都不算節日
從客觀來講,由消費帶動的節日,都不是純粹的節日
找這么多理由,其實歸根結底,主要是以為“窮”,窮人過什么節日啊!
IT男的思維
今天隨手翻UC,看到一個關于程序猿520表白的段子。
雖然是17年的老梗,但當時帖子比較火名為“她根本配不上我這么聰明的男人!”
?[段子鏈接]
http://www.sohu.com/a/168270871_99956288
段子是一張很長長長長圖,讓人看得難受
在這個重大節日---520情人節來臨之際,我卻是顯得更加寂寞無聊。看著那張長圖有點不爽(關鍵是朋友圈狗糧吃得有點多),于是.........就有了下面這張動態圖(用Python將其做成一張動態圖,這就是聰明的男人一貫的做法,哈哈哈哈)
接下來讓我們一起來看看聰明的男人,是如何將那張不爽的常常圖做成一張動態圖的?
圖片的拆分與合并
Python的PIL模塊在對圖片處理上簡直方便的不行...
先來說說圖片的拆分吧
先來看看長圖,內容是一共16張對白拼成的段子,其實我們只要把這16張圖按照等高的方式進行裁剪就OK了,so easy!
代碼主要用到了Image.crop(cropBox)的裁剪方式。
至于crop的拆分,點進去函數就能看到相關注釋:
Returns a rectangular region from this image. The box is a
4-tuple defining the left, upper, right, and lower pixel
coordinate. See :ref:coordinate-system.
from?PIL?import?Image
def?split_image(file,?split_times):
????path,?filename?=?os.path.split(file)
????os.chdir(path)
????try:
????????os.mkdir('pictures')
????except?FileExistsError:
????????pass
????img?=?Image.open(filename)
????width,?height?=?img.size
????per_height?=?height?/?split_times
????for?pictureNumber?in?range(split_times):
????????_cropBox?=?(0,?per_height?*?pictureNumber,?width?*?0.8,?per_height?*?(pictureNumber?+?1))
????????picture?=?img.crop(_cropBox)
????????picture_name?=?os.path.join(path,?'pictures',?"%d.png"?%?pictureNumber)
????????picture.save(picture_name)
split_image("C:\\Users\Administrator\Downloads\\520.jpg",?16)
代碼片段如上,簡單的處理下邊緣與長度即可。至于width的0.8,主要是因為圖片中萬惡的馬賽克和“騰訊視頻”的字樣,影響我看段子的心情...
結果如下圖:
圖片分隔效果.png
再來看看圖片合并
將16張剪切好的圖片,組合成一個gif的動畫,看起來會比單純的圖片看著高端多了,不是嗎?
之前說到了PIL模塊的強大,我們只需要使用Image的duration關鍵字,就能達到我們的目的。
上代碼看看吧:
from?PIL?import?Image
import?os
class?SplitLongPicture:
????def?__init__(self):
????????self.dirName?=?os.path.split(os.path.abspath(__file__))[0]
????????self.ImagePath?=?args.ImagePath
????????self.SplitTimes?=?args.SplitTimes
????????self.SwitchingTime?=?args.SwitchingTime
????????self.Path,?self.File?=?os.path.split(self.ImagePath)
????????self.Image?=?self.check_image_file()
????????self.pictureList?=?[]
????def?check_image_file(self):
????????_imageType?=?['.jpg',?'.png',?'.bmp']
????????if?not?os.path.isfile(self.ImagePath):
????????????raise?IOError("請檢查圖片路徑",?self.ImagePath)
????????elif?os.path.splitext(self.File)[1].lower()?not?in?_imageType:
????????????raise?TypeError("請選擇系統適配的圖片類型",?_imageType)
????????else:
????????????return?Image.open(self.ImagePath)
????def?split_image(self):
????????os.chdir(self.Path)
????????try:
????????????os.makedirs('pictures')
????????except?FileExistsError:
????????????pass
????????width,?height?=?self.Image.size
????????_unitHeight?=?height?/?self.SplitTimes
????????for?pictureNumber?in?range(self.SplitTimes):
????????????_cropBox?=?(0,?_unitHeight?*?pictureNumber,?width?*?0.8,?_unitHeight?*?(pictureNumber?+?1))
????????????_unitPicture?=?self.Image.crop(_cropBox)
????????????_pictureName?=?os.path.join(self.Path,?'pictures',?"%d.png"?%?pictureNumber)
????????????self.pictureList.append(_pictureName)
????????????_unitPicture.save(_pictureName)
????def?composite_gif(self):
????????images?=?[]
????????im?=?Image.open(self.pictureList[0])
????????for?file?in?self.pictureList[1:]:
????????????images.append(Image.open(file))
????????gifName?=?os.path.join(self.Path,?"result.gif")
????????im.save(gifName,?save_all=True,?loop=True,?append_images=images,?duration=self.SwitchingTime?*?1000)
if?__name__?==?'__main__':
????parser?=?argparse.ArgumentParser()
????parser.add_argument('-p',?'--ImagePath',?help="所需分隔的圖片途徑")
????parser.add_argument('-t',?'--SplitTimes',?type=int,?help="圖片分隔次數")
????parser.add_argument('-s',?'--SwitchingTime',?type=float,?help="GIF圖片切換時常長(單位:秒),支持小數")
????args?=?parser.parse_args()
????if?None?in?args.__dict__.values():
????????parser.print_help()
????else:
????????Main?=?SplitLongPicture()
????????Main.split_image()
????????Main.composite_gif()
代碼順便復習了一下argparse的相關知識。那么該怎么運行呢?
python D:\SplitLongPicture.py -p C:\Users\Administrator\Downloads\520.jpg -t 16 -s 1.25
result.gif
聽完這位小哥哥說的
終于明白什么叫做注孤身了
真的是“憑自己本事”單的身!
沒毛病啊!
送上視頻
大家好好感受一下這位兄弟的“無奈”
▼
如果你還認為,IT男 = 沉悶無趣死宅男?不不不,你錯了
------------------?End?-------------------
總結
以上是生活随笔為你收集整理的520这天,我突然意识到,她根本配不上我这么聪明的男人!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10 个不可不知的 Python 图像处
- 下一篇: 如何在Windows系统上使用Objec