誰說技術刻板,代碼營造浪漫

2021-02-12 中學生計算思維與實踐

又是一年520,很多人都會借這個時機來營造浪漫、表達愛意、傳遞溫情。說到本質,無非有兩種途徑,一是費點資金,二是費點心思。當然,兩者兼備效果更佳。
今天我們要說的是,作為信息老師、或者一個程序愛好者,如何扭轉我們一向刻板的印象,做一件浪漫的事?先看看別人做的效果。

聲明一下,以上圖片來源於網絡,網友公開發布的文章,如有侵權,請告知刪除。

接下來,我們就可以開工了。

目標:照片牆

於是我們今天的任務就比較明確了,做一個520形狀的照片牆。

分析:算法實現

那麼很顯然,核心問題就是這個連續貼圖的問題。照片變成小方塊以後,貼到什麼位置,這其實是一個計算問題。

因為不同的數字之間的規律不統一,而且還可能用到心形這樣的形狀。所以直接採用數學的方法去找規律寫循環,可能不那麼理想化。

所以,教大家一種法法,你們盯著上面的圖片再看,看看能不能看到下面的東西。

沒錯,這就是我們會考經常考的點陣數位化嘛,不過是從文字遷移到圖片。雖然一行行寫起來繁瑣一點,但是,前面說了,費點心思嘛。

實現:遍歷貼圖

接下來就是無聊的編碼時間了。

1、生成背景圖

我先生成一個背景圖,上面是23*8的矩陣,每個小照片塊,我們用50*50的話,那我們要生成的背景大小就是1150*400。

from PIL import Image,ImageColor
color=ImageColor.getrgb('rgb(170,16,16)')img=Image.new("RGBA",(1150,400),color)img.save("bg.png")

這個是用RGB顏色表示的方法,如果要簡化一些的話。直接color="pink"就可以生成粉色背景。好了,底色圖有了。

2、單圖寫入測試

千裡之行,始於足下,我們先往上面的背景裡寫一張圖試試,這些代碼直接百度一下Python貼圖或圖片合成即可,或者看PIL文檔。

from PIL import Image
bgImage=Image.open("bg.png")pstImage=Image.open("1.png")pi=pstImage.resize((50,50),Image.ANTIALIAS)bgImage.paste(pi,(50,50))bgImage.save("single.png")

3、多圖寫入實現

有了前面的鋪墊,接下來,說簡單也就簡單了。讀取那個記事本文件,循環判斷是否貼圖即可。

讀記事本的代碼我們之前用過多次,回顧如下:

with open("data.txt","r") as f:    lines=f.readlines()    for line in lines:        print(line.strip('\n'))

於是就有了這個的代碼和效果。   

from PIL import Image
bgImage=Image.open("bg.png")pstImage=Image.open("1.png")pi=pstImage.resize((50,50),Image.ANTIALIAS)r=0c=0with open("data.txt","r") as f: lines=f.readlines() for line in lines: for l in line.strip("\n"): if l=="1": bgImage.paste(pi,(50*c,50*r)) c=c+1 #行內挨個後移貼圖起點 c=0 #換行後列從0開始,為下一行貼圖準備 r=r+1 #換行後行號增1,為下一行貼圖準備bgImage.save("single.png")

請注意看下注釋部分,決定了能否對應貼圖到位。

其實看到這裡,你可能忽然會覺得,那個數字矩陣,不就是個二維列表嗎?幹嘛非要存到txt呢,我在程序裡定義個二維列表不就完了?沒錯,是為了可擴展性,這樣你可以做多個形狀txt隨意調用且不容易丟失。

思考:圖源讀取

這裡有個比較重要的問題,就是如果你的圖片源不是四四方方的圖怎麼辦?其實這還隱藏著一個批量的圖片裁切處理問題。由於50*50的比例比較小,我們暫時忽略了resize後的變形問題,對於一些特殊比例的可能需要手工處理。

另外,我們準備足夠多的照片按什麼順序來讀取呢?一個比較合理有趣的方案是讀取照片的存儲時間,按時間先後來讀取。或者可以手工給圖片編號,按照編號依次讀取,這些就看你們的心思了。

收官:最終編碼

我們把記事本文件讀取跑一遍,算一下,一共需要75張照片,所以準備75張以上的圖片備用。

這裡低調一點,我就用百度圖片裡扒下來的風景照來生成最終照片牆。

最終代碼如下

from PIL import Image
bgImage=Image.open("bg.png")
r=0c=0n=0with open("data.txt","r") as f: lines=f.readlines() for line in lines: for l in line.strip("\n"): if l=="1": pstImage=Image.open(r"pictures/風景_"+str(n)+".jpg") n=n+1 pi=pstImage.resize((50,50),Image.ANTIALIAS) bgImage.paste(pi,(50*c,50*r)) c=c+1 c=0 r=r+1 bgImage.save("result.png")

最終效果如下

修飾:添加文字

在圖片上寫文字,前面的文章也多有涉及,這裡就不喧賓奪主了。就是背景下面可以多預留一點空白,用於寫入一些浪漫的話。

後記:教學延拓

其實這個案例,作為教學上的案例的話,不僅僅局限於520,母親節、國慶節,其實都可以。圖案也不僅僅局限於以上圖案,只要學生能設計好圖案,生成txt數據都可以。案例知識點涵蓋文件讀寫、圖像處理、列表與循環、算法等等,希望對老師們教學有所啟發。也希望我們通過代碼,傳遞溫情。愛技術、愛專業的同時,更要好好愛家人、愛生活。

連結: https://pan.baidu.com/s/11HR66OFbvqVm7eZ47pEAtg 提取碼: 7gkm 

相關焦點

  • 用代碼編出櫻花的綻放,理科生浪漫起來真是hold不住
    除了雲賞櫻,聰明的武大人還想出了一個更加浪漫的賞櫻方法:用代碼編出櫻花綻放的過程。有人會問:為什麼感覺圖片很模糊?難怪總有人說,理科生浪漫起來,實在讓人招架不住啊!因為求代碼的人實在太多,武漢大學近日還公布了這個櫻花綻放的原始碼,原來實現這一浪漫想法的編程代碼正是Python。什麼是Python?
  • 做了多年技術團隊的 leader,但我還是更愛敲代碼
    Leader 經歷了不少的心路歷程,我目前在帶一支十幾人的技術團隊(控制團隊人數主要是遵循亞馬孫 CEO 貝索斯提出的兩個披薩原則)我記得剛開始帶團隊的時候我是非常抗拒的,因為總覺得管理太多的「雜事」佔用了我很多寫代碼的時間,包括目前雖然已經是一支十幾人技術團隊的 Leader,但是我平時也還是偏愛技術多一些,在業餘時間都會抽空寫寫代碼或者在 Leetcode 刷刷題,在從事管理工作這些時間裡看過很多書
  • JBL隨時營造浪漫約會氣氛!
    例如選擇這臺能夠隨時居家營造浪漫約會氣氛的JBL PULSE4無線炫彩音箱,來讓自己可以和愛人宅家浪漫約會一下,就是一個非常棒的方法!作為全新一代的JBL音樂脈動音箱,JBL PULSE4配置有全新升級的全面屏版光影秀。燈光氛圍感更強,並且360度無死角的多重動態光學變化,能夠在聽覺服務之外,給予我們足夠驚豔的視覺享受!
  • 不只是中國,看美劇中的法國刻板印象
    永遠在搭訕的法國男人、當面挖苦自己毫無情商的同事,刻板又俗套的奢侈品公司……也難怪法國都被這一系列的刻板印象搞得覺得受到侵犯了。 而女主角的人設也是老土的「傻白甜」設定,所謂的美式營銷就是到處拍照放到ins上,營造出巴黎浪漫又美貌的刻板印象
  • 不只是中國,看美劇中的法國刻板印象!
    也難怪法國都被這一系列的刻板印象搞得覺得受到侵犯了。 而女主角的人設也是老土的「傻白甜」設定, 所謂的美式營銷就是到處拍照放到ins上,營造出巴黎浪漫又美貌的刻板印象
  • 為什麼CTO、技術總監、架構師都不寫代碼,還這麼牛逼?
    程式設計師的核心能力是寫代碼的能力。就是做具體的代碼實現。所以CTO/技術總監/架構師,跟程式設計師的核心能力,是完全不一樣的能力,是沒法作直接比較的。通常我們說,CTO、技術總監、架構師們很牛逼,指的是他們的技術判斷力牛逼,而不是他們寫代碼的能力牛逼。
  • CTO、技術總監和技術經理有啥區別?
    在動畫中,葫蘆娃長得一模一樣,只能靠顏色來分辨誰是誰。那在生活中呢,遇到一個雙胞胎或者三胞胎,你能分清誰是誰嗎?很多時候,連他們的父母都分不清誰是老大老二了。萬一小孩子調皮,叫老大,兩個都答應。我相信,媽媽一定是懵逼的。最近關於丁香園的事,貌似挺火的。網站的CTO是一個知乎大V,還有自己的微信公眾號,此事一出,在微信群有支持也有反對之聲。
  • 營造浪漫空間,給愛人情人節驚喜
    其實禮物不一定要LV、Gucci奢侈品,裝點生活空間,能給愛人帶來更美好的浪漫哦!與愛人背靠背躺在舒適沙發上,仰望著屋頂星空,柔和的燈光襯託出溫馨感...兩人獨享的浪漫空間,要如何改造出驚喜呢?1.柔和燈光輝映不管是大戶型還是小戶型,燈是每家每戶少不了的裝飾品。看慣了平常的白晃晃的燈光,情人節給愛人來點不一樣的小驚喜。
  • 《嗜血代碼》的啟發
    宮崎英高作為一個在後遊戲工業,流水線數字重工業逐步取代浪漫設計師才華的時代,殺出重圍脫穎而出,可不僅僅是宮崎英高自身的才華。更重要的是他找到了施展他才華的空間:類魂遊戲。只有《嗜血代碼》例外。先說玩家即興自發為主的社交平臺的圖文傳播。《嗜血代碼》的確照顧了大量水平普通的玩家的戰鬥體驗。尤其是AI伴侶的引入,自帶多次復活和強輸出,更是讓玩家容錯率上升到極高。
  • 我國組織機構代碼—代碼發展史是什麼?
    回顧和總結組織機構代碼工作從啟動到發展的整個歷程,重溫國務院關於建立組織機構代碼制度的重要指示,在充分實踐的基礎上進一步深刻領會這一重要指示對組織機構代碼工作的指導意義,對促進全國組織機構代碼工作的科學發展,推動組織機構代碼制度的加緊建立有著非常重要的作用。
  • 組圖:鄭爽花房大片曝光盡顯優雅 鮮花滿屋營造浪漫氛圍
    照片中,她復古大小姐造型尊貴又優雅,鮮花滿屋營造浪漫氛圍,垂眸靜思淡淡回望,給人一種高貴冷豔的即視感。新浪娛樂訊 12月14日,一組鄭爽花房大片曝光。照片中,她復古大小姐造型尊貴又優雅,鮮花滿屋營造浪漫氛圍,垂眸靜思淡淡回望,給人一種高貴冷豔的即視感。新浪娛樂訊 12月14日,一組鄭爽花房大片曝光。
  • 2018微信翻譯表白浪漫的文字代碼大全 阿拉伯文代碼製作方法
    微信翻譯表白代碼是一個很有趣的功能,通過阿拉伯文來翻譯我愛你的文字,正好2018情人節就要到了,你準備好了嗎?下面,我們來看看2018最新微信翻譯表白代碼大全吧!  ohh  留在我身邊(為什麼ohh微信翻譯是留在我身邊原因介紹)  更多推薦:類似微信翻譯ohh詞語彙總(ilu ohhhh我愛你等翻譯代碼)
  • 別再壘代碼了
    本文回顧了從雲計算產業在國內落地以來,所經歷的企業上雲的歷程,以及技術推動下微服務和低代碼運動的興起,以及我國像飛算全自動軟體工程平臺這樣的自主軟體品牌,所做的創新和實踐。  因為趕工,業務需求實現大多沒有編寫設計方案文檔,只能靠人工點檢代碼;跟業務的溝通成本高,開發人員理解需求不到位就直接寫代碼,導致常常要返工。團隊成員技術能力參差不齊,代碼質量也就無法保證。  項目管理成本高,人員離職,新人接手維護時間成本高。總的來說,Peter 要在 4 個象限來回折騰。
  • 電影《後會無期》:浪漫英雄主義渲染到位,打破了技術層面的不足
    說到《後會無期》這部電影,相信我們多數人都有聽過,因為這是韓寒作為導演的第一部電影作品,這就意味著他從一個作家向執行導演轉變的象徵。總的來看,《後會無期》這部電影在技術上尚缺火候,就好像是一部實驗性的半成品,技術問題雖有,但是它也有屬於自己的吸引觀眾的優點所在,那就是電影中滿滿的浪漫英雄主義情懷,正因為感情渲染到位,讓所看之人不免心有力量感,直擊到每個觀眾心中獨屬的「英雄夢」。
  • HOLA特力和樂:如何營造七夕節浪漫氛圍
    聯商網消息:七夕——8月20日,中國的情人節,戀人們常會選擇互贈禮物表達情意,但有時愛情也需要營造浪漫的氛圍,增進彼此的好感度,為甜蜜加分!HOLA為你揭曉七夕密語!約會前奏【健身器材】在最美的時光遇見你
  • GitHub 左右為難:軟體侵權,但開原始碼合法,責任由誰來負?
    作者 | 陳思近幾年,隨著流媒體的普及,更多的電影、電視劇搬到了線上,用戶可以藉助手機、平板電腦隨時隨地的觀看,只需要花一些錢開通會員帳號
  • 整合零代碼+AI+雲原生技術,「速優雲」布局智慧教培和智慧社區
    同時,開發者短缺且其工資快速上漲,興起的編程教育正在培養更多人才,但遠遠不及技術的發展速度。零(低)代碼產品無需使用者懂得開發和寫代碼,只需積木式的搭建即可建設業務系統。創建新業務的門檻從未像今天這樣低,而零代碼正在努力打破最後一個技術壁壘。
  • 中國將建立統一社會信用代碼制度 企業三證合一
    三要取消妨礙人才自由流動的戶籍、學歷等限制,營造創業創新便利條件。為新技術、新業態、新模式成長留出空間,不得隨意設卡。四要盤活閒置廠房、物流設施等,為創業者提供低成本辦公場所。發展創業孵化和營銷、財務等第三方服務。五要用簡政放權、放管結合、優化服務更好發揮政府作用,以激發市場活力、推動「雙創」。加強智慧財產權保護,通過打造信息、技術等共享平臺和政府採購等方式,為創業創新加油添力。
  • 低代碼是啥?企業如何利用好低代碼?
    對方說:要適合娛樂圈的人用。一時半會還搞不清楚「娛樂圈」的人想用啥樣的任務管理工具,只是職業性地問:願意付費否?有購買,市場上自然就會有人做這樣的工具。過了一會兒,人家說:我們內部討論了一下,招個副導,就解決了!我就說,如果是重複性工作,用工具合適,如果每次的安排都不同而且不需要存檔,最好就是讓人來解決。
  • 520愛的表白,請收下這30條代碼
    ,把你中意的代碼發給她,看她能不能看懂,哈哈哈!而它們不是一般的代碼,它們是文化底蘊與編程技術的完美結合!是程式設計師表白的巔峰之作!更是突破天際的撩妹絕學!while (life < end) {  love++;}第二條:I can't say Hello to the World without u.