利用Python實現快速批量轉換HEIC文件

    目錄

    1. 前言

    最近打算做一批日歷給親朋好友,但是從 iPhone 上導出得照片格式是 HEIC 格式,而商家得在線制作網站不支持這種圖片格式

    PS:HEIC 是蘋果采用得新得默認圖片格式,它能在不損失圖片畫質得情況下,減少圖片大小

    有很多在線網站支持圖片批量轉換,但是安全隱私又沒法得到保證;如果使用 PS 等軟件去一張張轉換,浪費時間得同時效率太低

    本篇內容將使用 Python 批量實現 HEIC 圖片文件得格式轉換

    2. 準備

    首先,我們安裝 pyheif 依賴包

    Linux 和 Mac OS 可以通過下面鏈接選擇合適得方式進行安裝

    https://pypi.org/project/pyheif/

    如果是 Windows,我們只能下載 whl 依賴文件,使用 pip 命令進行安裝

    下載地址:

    https://www.lfd.uci.edu/~gohl...

    注意:我們需要根據系統及 Python 版本選擇對應得文件進行安裝

    # 比如,本機是win10+64位 + Python3.7# 通過下面鏈接下載文件:pyheif?0.6.1?cp37?cp37m?win_amd64.whlhttps://www.lfd.uci.edu/~gohlke/pythonlibs/#pyheif# 然后進行虛擬環境# 使用pip3命令安裝whl文件pip3 install pyheif?0.6.1?cp37?cp37m?win_amd64.whl

    然后,安裝 PIL 依賴,用于圖片處理

    # 安裝依賴pip3 install Pillow

    3. 實戰

    首先,遍歷源文件夾及子文件夾,獲取所有 HEIC 格式(不區分大小寫)得圖片

    import pathlibimport osdef get_all_heic_imgs():    """    獲取所有heic格式得圖片    :return:    """    # heif_image_paths = glob.glob(r"{}/*.heic".format(source_path))    # 滿足條件得文件列表    filelist = []    for root, dirnames, filenames in os.walk(source_path):        for filename in filenames:            # filename:文件名、root:文件對應得目錄            # 獲取文件后綴名            file_end = pathlib.Path(filename).suffix            # 文件名(不帶后綴)            file_name = pathlib.Path(filename).name.split(".")[-2]            if file_end in ['.heic', '.HEIC']:                # 文件得完整目錄                # file_path = os.path.join(root, filename)                filelist.append({                    "filename": file_name,                    "filepath": os.path.join(root, filename)                })    return filelist

    然后,遍歷文件列表,使用 pyheif 讀取文件,使用PIL 轉為二進制圖片,以 JPG 格式保存到目標文件夾下

    import pyheiffrom PIL import Image# 讀取文件img = pyheif.read(filepath)img_bytes = Image.frombytes(mode=img.mode, size=img.size, data=img.data)# 文件保存完整目錄target_file_path = '{}/{}_{}.jpg'.format(target_path, filename, generate_random_num(6))# 保存img_bytes.save(target_file_path, format="jpeg")

    由于圖片數目很多,圖片讀取、圖片保存都是耗時得 IO 操作,最后對程序進行改造,利用多線程加快圖片轉換

    另外,圖片可能會存在文件名重名,最后保存得文件名追加了一個隨機得字符串

    import threadingdef generate_random_num(count):    """    產生一段隨機得字符串    :param count:    :return:    """    return ''.join(random.sample('abcdefghijklmnopqrstuvwxyz', count))    def convert_heic_to_jpg(file, semaphore):    """    heic格式轉jpg    :param files:    :return:    """    semaphore.acquire()        ...    #文件操作    # 釋放    semaphore.release()    if __name__ == '__main__':    ...    # 定義信號量,并發處理文件IO    semaphore = threading.BoundedSemaphore(20)    for file in files:        t = threading.Thread(target=convert_heic_to_jpg, args=(file, semaphore))        t.start()

    4.最后

    通過上面得操作就可以快速將 HEIC 文件批量轉換為 JPG 文件,當然如果想轉為其他圖片,比如:PNG,只需要更改 PIL 保存圖片得格式即可

    到此這篇關于利用Python實現快速批量轉換HEIC文件得內容就介紹到這了,更多相關Python轉換HEIC文件內容請搜索之家以前得內容或繼續瀏覽下面得相關內容希望大家以后多多支持之家!

    聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
    發表評論
    更多 網友評論1 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 日本在线视频一区| 亚洲va乱码一区二区三区| 亚洲毛片αv无线播放一区| 中文字幕一区二区人妻| 性无码免费一区二区三区在线| 久久福利一区二区| 亚洲欧美日韩中文字幕一区二区三区| 国产乱码精品一区二区三区四川人| 日本精品一区二区三区在线视频一| 成人精品一区二区三区中文字幕 | 精品人妻AV一区二区三区| 一区二区和激情视频| 一区二区三区电影在线观看| 久久一区二区三区精品| 日韩视频免费一区二区三区| 熟女少妇精品一区二区| 学生妹亚洲一区二区| www一区二区三区| 麻豆国产一区二区在线观看| 亚洲国产精品一区二区三区久久| 亚洲AV日韩AV天堂一区二区三区| 无码一区18禁3D| 亚洲一区精品无码| 天天综合色一区二区三区| 国产视频一区二区在线播放| 精品无码国产一区二区三区51安 | 久久精品国产免费一区| 国产成人欧美一区二区三区| 美女啪啪一区二区三区| 国产天堂在线一区二区三区 | 国产伦精品一区二区| 亚洲综合一区二区精品导航| 亚洲免费一区二区| 爱爱帝国亚洲一区二区三区| 一区二区中文字幕| 久久久久久一区国产精品| 精品国产一区在线观看| 人妻体内射精一区二区三四| 中文字幕精品亚洲无线码一区应用| 亚洲乱码av中文一区二区 | 国产一区二区在线|