Как я программно проверяю, повреждается ли изображение (PNG, JPEG или GIF)?

Предел может влиять на производительность запроса (см. комментарии и ссылку ниже), и это также уменьшает набор результатов, который производится MySQL. Для запроса, в котором Вы ожидаете единственный результат, существуют преимущества.

, Кроме того, ограничивая набор результатов может на самом деле ускорить общее время запроса, поскольку передача больших наборов результатов использует память и потенциально составляет временные таблицы на диске. Я упоминаю это, поскольку я недавно видел приложение, которое не использовало предел, уничтожают сервер из-за огромных наборов результатов и с пределом на месте использование ресурса, отброшенное чрезвычайно.

Проверка эта страница для большего количества специфических особенностей: MySQL Documentation: ПРЕДЕЛЬНАЯ Оптимизация

17
задан Nakilon 2 September 2016 в 18:13
поделиться

5 ответов

Простым способом было бы попробовать загрузить и проверить файлы с помощью PIL (Python Imaging Library).

from PIL import Image

v_image = Image.open(file)
v_image.verify()

Перехватить исключения ...

Из документации ]:

im.verify ()

Пытается определить, поврежден ли файл, без фактического декодирования данных изображения. Если этот метод обнаруживает какие-либо проблемы, он вызывает соответствующие исключения. Этот метод работает только с вновь открытым изображением; если изображение уже было загружено, результат не определен. Кроме того, если вам нужно загрузить изображение после использования этого метода, вы должны повторно открыть файл изображения.

23
ответ дан 30 November 2019 в 11:44
поделиться

Я предлагаю вам проверить imagemagick для этого: http://www.imagemagick.org/

там у вас есть инструмент под названием identify, который вы можете использовать в сочетании с сценарий / стандартный вывод или вы можете использовать предоставленный программный интерфейс

6
ответ дан 30 November 2019 в 11:44
поделиться

В PHP с exif_imagetype () :

if (exif_imagetype($filename) === false)
{
    unlink($filename); // image is corrupted
}

РЕДАКТИРОВАТЬ : Или вы можете попытаться полностью загрузить изображение с помощью ImageCreateFromString () :

if (ImageCreateFromString(file_get_contents($filename)) === false)
{
    unlink($filename); // image is corrupted
}

Ресурс изображения будет возвращен успех. FALSE возвращается, если тип изображения не поддерживается, данные не в распознанном формате или изображение повреждено и не может быть загружено.

5
ответ дан 30 November 2019 в 11:44
поделиться

Если ваши точные требования состоят в том, чтобы оно отображалось правильно в FireFox ] у вас могут быть трудности - единственный способ быть уверенным - это установить ссылку на тот же исходный код загрузки изображений, что и FireFox.

Основное повреждение изображения (файл неполный) можно обнаружить, просто попытавшись открыть файл, используя любое количество библиотек изображений.

Однако многие изображения могут не отображаться просто потому, что они растягивают часть формата файла, который конкретная программа просмотра, которую вы используете, не может обрабатывать (GIF, в частности, имеет много таких крайних случаев, но вы можете найти JPEG и редкий файл PNG, который может отображаться только в определенных программах просмотра). Есть также некоторые уродливые крайние случаи JPEG, когда файл кажется не поврежденным в программе просмотра X, но на самом деле файл был обрезан и отображается правильно только потому, что было потеряно очень мало информации (FireFox может отображать некоторые правильно обрезают файлы JPEG [у вас серый низ],

3
ответ дан 30 November 2019 в 11:44
поделиться

Вы можете использовать imagemagick, если он доступен:

если вы хотите сделать всю папку

identify "./myfolder/*" >log.txt 2>&1

если вы хотите просто проверить файл:

identify myfile.jpg
0
ответ дан 30 November 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: