生活随笔
收集整理的這篇文章主要介紹了
高通8x12平台开机画面制作工具
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
你可能在網上看到很到關于手動更換手機開機圖片的文章,想想自己的開機畫面是小兩口,好基友的照片多么個性啊。但是你有沒有發現,網上下載的什么“一鍵生成”之類的,在你的手機上不能用啊,( ⊙ o ⊙ )是的,至少我手中的是這個樣子的,有不少網上下載的實際上都是用ffmpeg.exe制作的,我沒研究過,但是看到mpeg字眼,肯定跟圖像等多媒體格式相關。到底你的手機開機畫面怎么做,這個完全取決于你手機的bootloader中怎么解析了,所以網上什么一鍵制作等都是特定機型,并不通用的。
在解決這個需求時,我只知道Python是一種腳本,我甚至不知道如何用,用在哪里,環境樣子如何!只能憑經驗摸索,再找度娘,能看懂意思。
好了,我手里開發的機器,開機圖片一般都是在ubuntu環境下用python腳本制作的.
msm8x12\device\qcom\common\display\logo\logo_gen.py如下:
[python] ?view plaincopy
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? import ?sys,os?? import ?struct?? import ?StringIO?? from ?PIL? import ?Image?? ?? ?? ?? ?? def ?GetImgHeader(size):?? ????SECTOR_SIZE_IN_BYTES?=?512 ??? ?? ?? ????header?=?[0 ? for ?i? in ?range(SECTOR_SIZE_IN_BYTES)]?? ????width,?height?=?size?? ?? ?????? ????header[0 : 7 ]?=?[ord( 'S' ),ord( 'P' ),?ord( 'L' ),?ord( 'A' ),?? ???????????????????ord('S' ),ord( 'H' ),?ord( '!' ),?ord( '!' )]?? ?? ?????? ????header[8 ]?=?(?width????????&? 0xFF )?? ????header[9 ]?=?((width?>>? 8 ?)?&? 0xFF )?? ????header[10 ]=?((width?>>? 16 )?&? 0xFF )?? ????header[11 ]=?((width?>>? 24 )?&? 0xFF )?? ?? ?????? ????header[12 ]=?(?height????????&? 0xFF )?? ????header[13 ]=?((height?>>?? 8 )?&? 0xFF )?? ????header[14 ]=?((height?>>? 16 )?&? 0xFF )?? ????header[15 ]=?((height?>>? 24 )?&? 0xFF )?? ?? ????output?=?StringIO.StringIO()?? ????for ?i? in ?header:?? ????????output.write(struct.pack("B" ,?i))?? ????content?=?output.getvalue()?? ????output.close()?? ?? ?????? ????return ?content[: 512 ]?? ?? ?? ?? ?? def ?CheckImage(mode):?? ????if ?mode?==? "RGB" ? or ?mode?==? "RGBA" :?? ????????return ?? ????print ? "error:?need?RGB?or?RGBA?format?with?8?bit?depths" ?? ????sys.exit()?? ?? def ?GetImageBody(img):?? ????color?=?(0 ,? 0 ,? 0 )?? ????if ?img.mode?==? "RGB" :?? ????????img.load()?? ????????r,?g,?b?=?img.split()?? ?? ????if ?img.mode?==? "RGBA" :?? ????????background?=?Image.new("RGB" ,?img.size,?color)?? ????????img.load()?? ????????background.paste(img,?mask=img.split()[3 ])? ?? ????????r,?g,?b?=?background.split()?? ?? ????return ?Image.merge( "RGB" ,(b,g,r)).tostring()?? ?? ?? ?? ?? def ?MakeLogoImage(logo,?out):?? ????img?=?Image.open(logo)?? ????CheckImage(img.mode)?? ????file?=?open(out,?"wb" )?? ????file.write(GetImgHeader(img.size))?? ????file.write(GetImageBody(img))?? ????file.close()?? ?? ?? ?? ?? def ?ShowUsage():?? ????print ? "?usage:?python?logo_gen.py?[logo.png]" ?? ?? def ?GetPNGFile():?? ????infile?=?"logo.png" ? ?? ????num?=?len(sys.argv)?? ????if ?num?>? 2 :?? ????????ShowUsage()?? ????????sys.exit();??? ?? ????if ?num?==? 2 :?? ????????infile?=?sys.argv[1 ]?? ?? ????if ?os.access(infile,?os.R_OK)?!=? True :?? ????????ShowUsage()?? ????????sys.exit();??? ????return ?infile?? ?? if ?__name__?==? "__main__" :?? ????MakeLogoImage(GetPNGFile(),?"splash.img" )?? <??
說明中表示用python和PIL(python Image Library)制作,PIL是另外下載安裝的庫,圖片資源必須為png,且色深為8-bit的RGB或者RGBA格式。
生成的splash.img格式為文件頭+BGR原始數據:文件頭如上面結構體一樣排列,BGR就是將原B,R通道數據交換,把這樣的數據順序存在另一個文件中改名為splash.img即可。
在這個腳本下還有個腳本使用說明:python ./logo_gen.py snapdragon.png,實際上看代碼,如果不指定源png圖片,會自動尋找logo.png。
現在需求來了,小客戶很多,他們需求機器少,但卻要求換他們的開機logo,這個工作需要他們來做,難道客戶要去安裝ubuntu再去裝python環境再去做?那不行,客戶不是開發者,于是想辦法在windows系統下做個脫離環境的工具。要么根據上面python的代碼解析函數意義,再用C代碼去模擬出來,但是要點時間,于是上網搜搜,有個第三方python庫叫py2exe,它能把python腳本連同各種依賴打包在一個文件夾下,這樣就脫離環境了。我的做法具體為:
windows XP系統安裝,
python2.7.3
py2exe-0.6.9.win32-py2.7
PIL-1.1.7.win32-py2.7 下載地址http://www.pythonware.com/products/pil/index.htm
軟件怎么裝不說了。其中后兩個是python的庫,下載完直接下一步安裝,會直接安裝到python安裝目錄下的Lib\site-packages。第二個py2exe下載時要看清與python版本必須一致,不然不給安裝的。另python安裝時把其安裝的路徑加入到環境變量Path,這樣任何地方才能識別到python。
windows下環境都弄好了,在CMD下運行python logo_gen xxx.png,出錯嘍,
為啥ubuntu與windows下同一腳本運行不同呢?!
r, g, b = img.split()這是出錯的地方,'NoneType' 感覺像空值造成的,
經網上查詢,在腳本中出錯的上方添加img.load()即可,如下
。。。
? ? ? ? img.load() ? ? ? ? r, g, b = img.split()
。。。
編譯還是錯了,如下
識別錯誤!用NotePad++打開腳本,再打開“顯示所有字符”如下
看見么╮(╯_╰)╭,其他對齊用的是空格,img.loader()用的卻是Tab,改成空格,運行結果正確!
好了 ,我要做的是可執行文件,脫離python環境,不急,前面不是裝了py2exe庫么,它就是干這個的。
在logo_gen.py同目錄下,新建一個名為mysetup.py設置腳本,內容為:
[python] ?view plaincopy
?? from ?distutils.core? import ?setup????? import ?py2exe????? setup(console=["logo_gen.py" ])??
其中中括號內就是你要轉換為exe的python腳本名,上面兩行是必須這樣寫的。至于設置腳本的語法,上網搜去吧,我也不知道,暫時需要到哪我就用到哪。
cmd下運行python mysetup.py py2exe,會出現許多打印信息,最終生成2個文件夾build和dist,如下圖
這個dist目錄就是最終我的需求,可執行文件及其依賴都在這,將png圖面改名為logo.png放到dist目錄,進入dist目錄,雙擊運行logo_gen.exe你會看見生成了splash.img,這就是開機圖片要燒寫的鏡像。
總結
以上是生活随笔 為你收集整理的高通8x12平台开机画面制作工具 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。