- 使用说明,把拍摄数据放入文件夹dir 。
- dir 目录中新建heic2jpg文件夹。
格式如下:
—dir
------heic2jpg
------XX1.heic
------XX2.heic
------XX3.heic
------XX4.heic
…
代码运行结束,格式如下:
格式如下:
—dir
------heic2jpg
---------XX1.jpg
---------XX2.jpg
---------XX3.jpg
---------XX4.jpg
------XX1.heic
------XX2.heic
------XX3.heic
------XX4.heic
…
import subprocess
import os
import io
import whatimage
import pyheif
import traceback
from PIL import Image
import string
def decodeImage(bytesIo,dir,name,n):
try:
fmt = whatimage.identify_image(bytesIo)
# print(fmt)
# print('fmt = ', fmt)
if fmt in ['heic']:
i = pyheif.read_heif(bytesIo)
# print('i = ', i)
# print('i.metadata = ', i.metadata)
pi = Image.frombytes(mode=i.mode, size=i.size, data=i.data)
# print('pi = ', pi)
pi = pi.convert('RGB')
save_dir = dir+'/heic2jpg/'+str(n)+'.jpg'
assert os.path.exists(dir+'/heic2jpg/')
pi.save(save_dir, format="jpeg")
return 0
except:
traceback.print_exc()
return -1
def read_image_file_rb(file_path):
with open(file_path, 'rb') as f:
file_data = f.read()
return file_data
def data_dir(dir):
file_names = [i for i in os.walk(dir)][0][2]
return file_names
if __name__ == "__main__":
dir = r'/path' #修改目录路径
file_names = data_dir(dir)
n = 0
for i in file_names:
file_path = dir+"/"+i
j = i.split('.')[0]
# print(i)
data = read_image_file_rb(file_path)
# print('data = ', data)
BOOL = decodeImage(data,dir,j,n)
n = n + 1
if BOOL == -1:
print(i,"error")
break
print(i,"finished")