<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          教你用 Python 快速批量轉(zhuǎn)換 HEIC 文件

          共 2964字,需瀏覽 6分鐘

           ·

          2021-12-25 01:06




          點(diǎn)擊上方 “AirPython”,選擇 “加為星標(biāo)

          第一時(shí)間關(guān)注 Python 原創(chuàng)干貨!


          1. 前言

          大家好,我是安果!

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

          PS:HEIC 是蘋果采用的新的默認(rèn)圖片格式,它能在不損失圖片畫質(zhì)的情況下,減少圖片大小

          有很多在線網(wǎng)站支持圖片批量轉(zhuǎn)換,但是安全隱私又沒法得到保證;如果使用 PS 等軟件去一張張轉(zhuǎn)換,浪費(fèi)時(shí)間的同時(shí)效率太低

          本篇文章將使用 Python 批量實(shí)現(xiàn) HEIC 圖片文件的格式轉(zhuǎn)換

          2. 準(zhǔn)備

          首先,我們安裝?pyheif 依賴包

          Linux 和 Mac OS?可以通過下面鏈接選擇合適的方式進(jìn)行安裝

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

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

          下載地址:

          https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyheif

          注意:我們需要根據(jù)系統(tǒng)及 Python 版本選擇對應(yīng)的文件進(jìn)行安裝

          #?比如,本機(jī)是win10+64位?+?Python3.7
          #?通過下面鏈接下載文件:pyheif?0.6.1?cp37?cp37m?win_amd64.whl
          https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyheif

          #?然后進(jìn)行虛擬環(huán)境
          #?使用pip3命令安裝whl文件
          pip3?install?pyheif?0.6.1?cp37?cp37m?win_amd64.whl

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

          #?安裝依賴
          pip3?install?Pillow

          3.?實(shí)戰(zhàn)

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

          import?pathlib
          import?os

          def?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:文件對應(yīng)的目錄
          ????????????#?獲取文件后綴名
          ????????????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 轉(zhuǎn)為二進(jìn)制圖片,以 JPG 格式保存到目標(biāo)文件夾下

          import?pyheif
          from?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")

          由于圖片數(shù)目很多,圖片讀取、圖片保存都是耗時(shí)的 IO 操作,最后對程序進(jìn)行改造,利用多線程加快圖片轉(zhuǎn)換

          另外,圖片可能會(huì)存在文件名重名,最后保存的文件名追加了一個(gè)隨機(jī)的字符串

          import?threading

          def?generate_random_num(count):
          ????"""
          ????產(chǎn)生一段隨機(jī)的字符串
          ????:param?count:
          ????:return:
          ????"
          ""
          ????return?''.join(random.sample('abcdefghijklmnopqrstuvwxyz',?count))
          ????
          def?convert_heic_to_jpg(file,?semaphore):
          ????"""
          ????heic格式轉(zhuǎn)jpg
          ????:param?files:
          ????:return:
          ????"
          ""
          ????semaphore.acquire()
          ????
          ????...
          ????#文件操作

          ????#?釋放
          ????semaphore.release()
          ????
          if?__name__?==?'__main__':
          ????...
          ????#?定義信號(hào)量,并發(fā)處理文件IO
          ????semaphore?=?threading.BoundedSemaphore(20)
          ????for?file?in?files:
          ????????t?=?threading.Thread(target=convert_heic_to_jpg,?args=(file,?semaphore))
          ????????t.start()

          4. 最后

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

          我已將文中所有源碼上傳到后臺(tái),回復(fù)關(guān)鍵字heic」即可以獲取

          如果你覺得文章還不錯(cuò),請大家?點(diǎn)贊、分享、留言?下,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!




          推薦閱讀
          這一次,Google 終于對 Web 自動(dòng)化下手了!

          厲害了!推薦一個(gè) Web 端自動(dòng)化神器 - Automa

          推薦 5 款私藏的優(yōu)質(zhì) Chrome 插件(3)

          小技巧 | Get 到一個(gè) Web 自動(dòng)化方案,絕了!


          END



          ??分享、點(diǎn)贊、在看,給個(gè)三連擊唄!
          瀏覽 61
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91福利网在线观看 | 台湾 四级 无码 | 理论片人人操人人摸 | 日韩精品A片一区二区三区妖精 | 三级av无码在线 三级电影在线播放 |