使用二进制或者bin提升读取png,jpg等图片的速度
使用bin优化
提升加载速度,不用解码。
代码
# original
img = imageio.imread(f)
# improve
def check_and_transform(ext, img, bin, verbose=True):
"""如果bin文件不存在或者使用reset模式:
则使用imageio.imread将image转换为uint8, 再使用pickle将其变成二进制文件。
:param ext: 判断是否reset
:param img: 输入图片路径
:param bin: 输出bin路径
:param verbose: 是否打印
"""
if not os.path.isfile(f) or ext.find('reset') >= 0:
if verbose:
print('Making a binary: {}'.format(f))
with open(bin, 'wb') as _f:
pickle.dump(imageio.imread(img), _f)
with open(bin, 'rb') as _f:
img = pickle.load(_f)
实验
读取平均大小为4MB和1MB大小图片的png图片
0.06496280908584595 s
读取平均大小为8MB和2MB大小(由png转换)的bin图片
0.0112137046456336975 s
总结
存储空间变大了一倍但是读取速度提升了5-6倍。