Способен ли PIL восстанавливать усеченные изображения? Если нет, можно ли добавить эту функцию? - PullRequest
0 голосов
/ 24 января 2020

У меня есть проект, который использует node.js для загрузки изображений на облачный сервер. Затем скрипт Python вращается и изменяет их размер с помощью PIL. По некоторым причинам, всегда есть несколько изображений (jpg / jpeg), которые выдают ошибку об укороченном изображении.

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/local/lib/python3.4/dist-packages/PIL/Image.py", line 1960, in save 
      self.load()
    File "/usr/local/lib/python3.4/dist-packages/PIL/ImageFile.py", line 238, in load 
      len(b))
    OSError: image file is truncated (28 bytes not processed)

Из моего исследования большинство людей просто используют try / исключением, чтобы найти эти плохие изображения и получить новые из источника (которые в моем случае Android и айфонов). Тем не менее, я могу открыть эти картинки с помощью браузера и других графических программ (и они выглядят просто отлично!). Таким образом, кажется, что большинство приложений могут иметь дело с определенным количеством искажения изображения. Я знаю, что могу заставить PIL обрабатывать усеченные изображения, но тогда они имеют неприятные серые области.

    LOAD_TRUNCATED_IMAGES = True

Есть ли способ избежать этих (иногда огромных%) серых областей или на самом деле PIL исправит изображение?

Если нет, могу ли я добавить это как запрос функции? Я мог бы даже принять вызов, но я не знаю, насколько это сложно. Кто-нибудь желал бы направить меня?

Было бы фантастически c, если бы был только крошечный (28 байт) серый (или цвета соседних пикселей) прямоугольник того, что урезано, вместо Весь остальной образ. Некоторые изображения, которые я обрабатываю, будут примерно на 90% серыми.

Или кто-нибудь знает о другом модуле или приложении CLI Python (возможно, GIMP), который может справиться с незначительной проблемой повреждения и повторно сохранить image.

Я попытался повторно открыть изображение при возникновении ошибки, но это не помогло.

Спасибо!

...