Оказывается, GD в PHP отказывается воспринимать некоторые JPEG-файлы. А именно, функции работы с JPEG выдают предупреждения, хотя всякие просмотрщики изображений отображают файл нормально. Виной тому (в обнаруженном мной случае) являются лишние данные (откуда?)
Предупреждение об ошибке со стороны специализированных утилит выглядит примерно так:
Extraneous 12345 padding bytes before section 0xE2
Что можно с этим сделать:
1) Пофиксить файл с помощью jpegtran с параметрами -copy all и -perfect. Минус: у меня файл уменьшился в размере на большее число байт, чем было лишних. Возможно, всё-таки происходит перекодирование?
2) Отключить предупреждения в PHP. Для этого есть опция gd.jpeg_ignore_warning. Минус: getimagesize всё равно возвращает FALSE.