1. 程式人生 > >android開機動畫包製作工具實現

android開機動畫包製作工具實現

# coding=utf-8
__author__ = 'snomy'


import os
import shutil
import Image
import ImageFilter
import zipfile
import sys


# ---------------------- 函式 --------------------------
def isFullBlack(xy, image):
    point_cnt = 0
    xy_left = (xy[0]-1, xy[1]+0)
    xy_right = (xy[0]+1, xy[1]+0)
    xy_up = (xy[0]+0, xy[1]-1)
    xy_bottom = (xy[0]+0, xy[1]+1)


    lst = [xy, xy_left, xy_right, xy_up, xy_bottom]
    for i in lst:
        xxx = i[0]
        yyy = i[1]
        if i[0] < 0:
            xxx = 0
        if i[0] >= image.size[0]:
            xxx =  xy[0]
        if i[1] < 0:
            yyy = 0
        if i[1] >= image.size[1]:
            yyy = xy[1]


        if image.getpixel((xxx, yyy)) != (0, 0, 0, 255):
            point_cnt += 1
    return point_cnt


# ---------------------- 程式執行 --------------------------
# 步進多少像數分割圖片
MOVE_PIX = 32


# 判斷logo.png是否存在,不存在退出
if not os.path.exists("logo.png"):
    print "logo.png is not existent"
    sys.exit()


# 判斷guang.png是否存在,不存在退出
if not os.path.exists("guang.png"):
    print "guang.png is not existent"
    sys.exit()


# 1. 輸入每秒顯示幾張
if len(sys.argv) >= 2:
    pics_per_second = eval(sys.argv[1])
    if pics_per_second <= 0:
        print "too small"
        sys.exit()
    if pics_per_second > 60:
        print "too large"
        sys.exit()
    if 1<= pics_per_second <= 60:
        print pics_per_second, "frame/s"
else:
    while True:
        pics_per_second = input("frame/s: ")
        if pics_per_second <= 0:
            print "too small"
        if pics_per_second > 60:
            print "too large"
        if 1<= pics_per_second <= 60:
            break


Im = Image.open("logo.png")
print "logo.png"
print Im.mode, Im.size, Im.format


Im_guang = Image.open("guang.png")
print "guang.png"
print Im_guang.mode, Im_guang.size, Im_guang.format


# 先刪除資料夾
if os.path.exists("part0"):
    shutil.rmtree("part0")
# 建立資料夾
os.mkdir("part0")


# 判斷檔案是否存在
if os.path.exists("desc.txt"):
    os.remove("desc.txt")


# 2. 生成 desc.txt 檔案
hDescFile = open("desc.txt", mode='w')
hDescFile.write("%d %d %d\n" % (Im.size[0], Im.size[1], pics_per_second))
hDescFile.write("p 0 0 part0\n")
hDescFile.close()


# 2.5 判斷是否存在掩膜圖片,沒有則生成掩膜圖片,有則使用現有的
img_mask = Image.new('RGBA', Im.size)
if not os.path.exists("mask.png"):
    print "mask.png is not existent"
    img_mask.paste(Im, (0, 0))
    for height in range(img_mask.size[1]):
        for width in range(img_mask.size[0]):
            #if img_mask.getpixel((width, height)) != (0, 0, 0, 255):
            cnt = isFullBlack((width, height), Im)
            if cnt == 5:
                img_mask.putpixel((width, height), ((0, 0, 0, 0)))
            elif cnt == 4:
                img_mask.putpixel((width, height), ((0, 0, 0, 50)))
            elif cnt == 3:
                img_mask.putpixel((width, height), ((0, 0, 0, 100)))
            elif cnt == 2:
                img_mask.putpixel((width, height), ((0, 0, 0, 150)))
            elif cnt == 1:
                img_mask.putpixel((width, height), ((0, 0, 0, 200)))
    #img_mask.save("img_mask.png")
else:
    print "use mask.png"
    img_mask = Image.open("mask.png")
    print img_mask.mode, img_mask.size, img_mask.format


# 3. 生成 每張圖片
index = 0
while True:
    if MOVE_PIX*index > Im.size[0]:
        break
    new_img = Image.new('RGB', Im.size)
    new_img.paste(Im, (0, 0))
    new_img.paste(Im_guang, (MOVE_PIX*index, 0), Im_guang)
    new_img.paste(img_mask, (0, 0), img_mask)
    save_path = "part0/%04d.png" % index
    print save_path
    new_img.save(save_path, "PNG")
    index += 1
#end while


# 4. 生成zip檔案
if os.path.exists("bootanimation.zip"):
    os.remove("bootanimation.zip")


zpfd = zipfile.ZipFile("bootanimation.zip", mode='w', compression=zipfile.ZIP_STORED)
zpfd.write("desc.txt")
startdir = "part0"
for dirpath, dirnames, filenames in os.walk(startdir):
    for filename in filenames:
        zpfd.write(os.path.join(dirpath, filename))
zpfd.close()
print " -------- make bootanimation.zip OK --------"


# 5. 清理檔案
if os.path.exists("part0"):
    shutil.rmtree("part0")


if os.path.exists("desc.txt"):
    os.remove("desc.txt")


相關推薦

android開機動畫製作工具實現

# coding=utf-8 __author__ = 'snomy' import os import shutil import Image import ImageFilter import zipfile import sys # ---------------------- 函式 -----

Android開機三個階段的開機Logo與開機動畫製作

480 427 30  ---這裡的480代表圖片的畫素(大小)寬度,427代表圖片的畫素(大小)高度,30代表幀數;      p 1 0 part0 ---這裡的p代表標誌符,1代表迴圈次數為1次,0代表階段間隔時間為0,part0代表對應的資料夾名,為第一階段動畫圖片目錄;     p 0 0 part

Android開機動畫的顯示(一)

參考部落格 主要是跟著老羅的部落格,深入研究學習下Android的UI架構,徹底搞清楚繪製流程。鑑於老羅的部落格寫成時間有點久,分析的Andorid版本也有點低。現在從Android P的原始碼開始分析。 同樣的,從Android啟動顯示的畫面順序依次分析。

Android開機動畫的顯示(二)

參考部落格 接著上面Android開機動畫的顯示(一)分析,開機動畫怎麼結束的,又是如何顯示桌面(鎖屏介面)的。 一、程式碼流程 在前面的 Android開機流程 可以知道,SystemServer最後會呼叫到AMS.systemReady 1.1 AMS.

安裝製作工具 SetupFactory 詳解

轉自:http://www.cnblogs.com/SavionZhang/p/4106338.html?utm_source=tuicool&utm_medium=referral  Setup Factory 是一個強大的安裝程式製作工具。提供了安裝製作嚮

Android開機動畫

    Android系統的開機動畫可分為三個部分,kernel啟動,init程序啟動,android系統服務啟動。這三個開機動畫都是在一個叫做 幀緩衝區(frame buffer)的硬體裝置上進行渲染繪製的。http://hovertree.com/menu/android/ 在Linux核心中,每一個硬

android開機動畫啟動流程

從android的Surface Flinger服務啟動分析知道,開機動畫是在SurfaceFlinger例項通過呼叫startBootAnim()啟動的。 下面我們就一起學習BootAnim是如何啟動和結束的,我精讀程式碼前都喜歡先描出框架圖,以此圖為基礎再去

android 屬性動畫 vs 延時實現動畫

屬性動畫 我們用屬性動畫實現動畫常用的程式碼: ObjectAnimator.ofFloat(targetView,"translateX",0,100) .setDuration(1000).start(); 屬性動畫一般只能

Android開機動畫流程

Android系統在啟動過程中,最多可以出現三個畫面。第一個開機畫面是在核心啟動的過程中出現,是一個靜態的畫面;第二個畫面是在init程序啟動的過程中出現的,也是一個靜態的畫面;第三個畫面是在系統服務啟動的過程中出現 ,是一個動態的畫面。這三個畫面都是在一個被稱

windows 安裝製作工具

各種安裝包打包釋出工具(安裝製作工具)評測       作為程式設計師,經常遇到需要打包自己勞動成果的時候,這也算是廣大碼工辛苦奔波之後的殺青之作,收尾之筆。因此,安裝包製作的好壞也直接關係到整個工程專案的質量。這裡HAWARK STUDIO對幾種常見的程式打包封裝工具進行

Android OTA升級製作指令碼詳解(一,引數解析)

寫在前面:     “build/tools/releasetools/ota_from_target_files  -u lk.bin  -n target.zip update.zip”這是製作整包的命令,很顯然這裡支援lk升級。本系列博文主要對該命令的執行流程及原理進

Android 開機動畫客製化

Android開機動畫總共有三個過程。第一個開機動畫是在Kenel啟動時顯示的,第二個開機動畫是在init程序啟動時顯示的,這兩個都是靜態圖片。第三個動畫是在系統服務啟動過程中顯示的,他是一個動態圖片,也是我們關注比較多的動畫。 關於動畫的播放,主要涉及f

Cordova外掛開發(2)-Android外掛安裝製作詳解

本篇文章講述的是如何製作自己的Cordova外掛安裝包(Android),具體內容包括以下三個方面: 1,安裝和使用plugman; 2,開發自己的Cordova外掛安裝包; 3,外掛安裝包的安裝與解除安裝; 本篇文章以自定義加密壓縮檔案外掛的實踐過程為例,本人不會IOS,

使用 CSS3 實現超炫的 Loading(載入)動畫效果以及cs3的線上製作工具

loading: http://www.cnblogs.com/lhb25/p/loading-spinners-animated-with-css3.html http://www.cnblogs.com/lhb25/archive/2011/11/22/best-aw

Android ListView動畫實現方法

rri pan 自己 data- src def popu 動畫 onclick 在Android中listview是最經常使用的控件之中的一個,可是有時候我們會認為千篇一律的listview看起來過於單調,於是就產生了listView動畫,listview載入了動畫會

android縮放動畫的兩種實現方法

get odi omx rac tor Coding eight rpo odin 在android開發。我們會常常使用到縮放動畫,普通情況下縮放動畫有兩種實現方式。一種是直接通過java代碼去實現,第二種是通過配置文件實現動畫,以下是兩種動畫的基本是用法: Ja

Android ListView動畫特效實現原理及源代碼

stat 每一個 應該 所有 ner haar .get tde pri Android 動畫分三種,當中屬性動畫為我們最經常使用動畫,且能滿足項目中開發差點兒所有需求,google官方包支持3.0+。我們能夠引用三方包nineoldandr

Xamarin.android Activity動畫切換效果實現

omx over tails detail ons too ide xamarin Coding http://blog.csdn.net/esunshine1985/article/details/44302903 1.在Resources——values下新建sty

Android仿騰訊手機管家實現桌面懸浮窗小火箭發射的動畫效果

無標題 服務 ice null obj activit 中間 ktr https 功能分析: 1、小火箭遊離在activity之外,不依附於任何activity,不管activity是否開啟,不影響小火箭的代碼邏輯,所以小火箭的代碼邏輯是要寫在服務中; 2、小火箭掛載在手機