python - Python PIL ValueError:没有足够的图像数据
问题描述
我编写了一个函数来加载图像(jpg、JPEG、png、gif 等)并将其转换为 jpg。代码如下所示:
def jpg_image_open(file_path, fill_color=(255, 255, 255)):
image = PIL.Image.open(file_path)
print(file_path, image.mode)
if file_path.endswith('.gif'):
# print(image.is_animated, image.n_frames)
for im_frame in PIL.ImageSequence.Iterator(image):
# Converting it to RGB to ensure that it has 3 dimensions as requested
im_frame = im_frame.convert('RGB')
image = im_frame
break
elif file_path.endswith('.png'):
image.load()
if image.mode in ('P', 'L'):
image.convert("RGB")
elif image.mode in ('RGBA', 'LA'):
# https://stackoverflow.com/a/9459208/2049763
print(file_path, " has transparency layer")
# image.load() # required for png.split()
background = PIL.Image.new(image.mode[:-1], image.size, fill_color)
background.paste(image, image.split()[-1])
image = background
return image, np.array(image)
我通常从其他文件中调用它而不会出错。
# read input image as numpy array
loaded_img, in_image = create_my_tf_record_util.jpg_image_open(img_file)
PIL.Image.fromarray(in_image, 'RGB').save(out_img_file)
它适用于所有图像,除非图像处于“P”、“L”模式。
Traceback (most recent call last):
File "dataset_tools/create_my_tf_record_coco.py", line 322, in thread_cube_map_annotation_png
PIL.Image.fromarray(in_image, 'RGB').save(out_img_file)
File "/home/mazhar/miniconda3/envs/mytfenv/lib/python3.6/site-packages/PIL/Image.py", line 2554, in fromarray
return frombuffer(mode, size, obj, "raw", rawmode, 0, 1)
File "/home/mazhar/miniconda3/envs/mytfenv/lib/python3.6/site-packages/PIL/Image.py", line 2497, in frombuffer
return frombytes(mode, size, data, decoder_name, args)
File "/home/mazhar/miniconda3/envs/mytfenv/lib/python3.6/site-packages/PIL/Image.py", line 2430, in frombytes
im.frombytes(data, decoder_name, args)
File "/home/mazhar/miniconda3/envs/mytfenv/lib/python3.6/site-packages/PIL/Image.py", line 812, in frombytes
raise ValueError("not enough image data")
ValueError: not enough image data
解决方案
推荐阅读
- angular - 将 ag-grid 从共享模块导出到延迟加载模块给出错误
- c# - C#不能查询XML但可以遍历节点?
- angular - 如何更改日期时间选择器的大小?我正在使用 ng-pick-date-time
- javascript - 变量在 else 语句中未定义
- docker - Docker-compose up 问题端口 443 (98: Address already in use) 错误记录在 nginx 日志中
- html - 部分内容时显示 SVG 内联:url() 并更改其颜色
- angular - 角度的其他异步函数内部没有发生函数调用
- php - 如何使用其他框架验证 cake php 3 哈希生成的密码?
- symfony - Symfony 要求输入提示 SqlWalker 构造函数参数
- vue.js - Vue - 不能在模块外使用 import 语句