【问题标题】:pillow odd truncted jpg images behavior on the same image枕头奇数截断 jpg 图像在同一图像上的行为
【发布时间】:2018-03-15 18:50:58
【问题描述】:

我有相同的图像,其中一张是存储在我机器上的原始图像,另一张上传到 azure blob 存储并下载回我的本地机器。 这是一段代码(Python 3.6.3、Pillow-SIMD 4.3.0post0、libjpeg-turbo、ubuntu 17.10/alpine docker 容器):

image_stream = open('src/app/resize/resizer/corrupted_blob.jpg', 'rb')
image = Image.open(image_stream)
image.load()

当解释器命中 .load 方法时引发异常:OSError: image file is truncated (6 bytes not processed)

所以它只发生在corrupted_blob.jpgcorrupted_original.jpg 被正确加载和显示。 我知道第一个假设是“在上传过程中发生了一些事情”,但是浏览器或 windows/ubuntu 图像查看器或另一个渲染图像的软件可以正确处理这两个图像。因此,枕头或底层 libjpeg 有一些东西。

我尝试使用ImageFile.LOAD_TRUNCATED_IMAGES = True,但我得到的只是一张黑色图像-_-

请帮忙!

original image

blob uploaded/downloaded image

【问题讨论】:

    标签: python-3.x pillow libjpeg libjpeg-turbo


    【解决方案1】:

    所以经过调查,我发现由于某种原因缺少后缀 JPEG 字节。这是解决方法:

    except OSError as e:
        fixed_image_bytes = image_stream.getvalue() + b'\xff\xd9'
        with io.BytesIO(fixed_image_bytes) as fixed_image_stream:
            image = Image.open(fixed_image_stream)
            image.load()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      相关资源
      最近更新 更多