[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: getimagesize возвращает FALSE на корректный jpg
Страницы: 1, 2
gmother
Сталкиваюсь уже не в первый раз.
Пример картинки: http://mavrin.net/bcaa-6000-2.jpg
Проверочный код: http://mavrin.net/test.php
$file = "bcaa-6000-2.jpg";
$info = getimagesize($file);
var_dump($info);

ImageMagick на команду identify bcaa-6000-2.jpg говорит:
bcaa-6000-2.jpg JPEG 1315x1610 1315x1610+0+0 8-bit DirectClass 616KB 0.000u 0:00.010
вроде ничего криминального.

Пробовал на PHP Version 5.4.36-0+deb7u3 и на PHP Version 5.3.28.
Памяти 300М на одном и 160М на другом, вроде более чем достаточно.

Помогает пересохранить в гимпе, но их десятки тысяч, слишком геморно отслеживать и вообще этим заниматься.
Есть ли какие-либо идеи относительно причин, и того, что с этим можно сделать? Гугль не помог.
Invis1ble
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');

$file = "bcaa-6000-2.jpg";
$info = getimagesize($file);
var_dump($info);


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

stump
Думаю что ответ где-то тут
Цитата (http://php.net)
Замечание:
Некоторые форматы файлов могут хранить несколько изображений или не содержать изображения вообще. В таких случаях getimagesize() не сможет определить размер изображения. getimagesize() вернет нули в качестве значений высоты и ширины.

Цитата (http://php.net)
В случае ошибки функция вернет FALSE.

Ну или рядом.

Открыл изображение с помощью mspaint сохранил как bcaa.jpg и БИНГОО!!!!!!!!!!
array(7) { [0]=> int(1315) [1]=> int(1610) [2]=> int(2) [3]=> string(26) "width="1315" height="1610"" ["bits"]=> int(8) ["channels"]=> int(3) ["mime"]=> string(10) "image/jpeg" 


Собственно картинка

П.С. Думаю при наложении слоев произошли нехорошие апдейты файла которые ошибку выдают. Стоит или в фотошопе выполнить сведение слоев перед сохранением или паинтом пересохранять все файлы. Или что-то похожее придумать.

_____________
Трус не играет в хокей
kristall
Можно каким-нибудь jpegoptim'ом пройтись, заодно уменьшив размер и убрав палевный exif.

_____________
echo '<pre>',print_r($var, 1);die;

root@server# make love && war
gmother
Invis1ble: Ошибок никаких нет, я в логах смотрел. Добавил ваш код в http://mavrin.net/test.php

stump: Спасибо, да, пересохранение помогает, но это не наш метод. Оно загружается и обновляется само, и в довольно большом количестве.
Хотя, если лучше идей не будет, напишу скрипт, чтобы парсил все папки картинок и пересохранял те, которые возвращают false, imagemagick'ом.
gmother
Цитата (kristall @ 15.05.2015 - 15:17)
Можно каким-нибудь jpegoptim'ом пройтись, заодно уменьшив размер и убрав палевный exif.

спасибо, посмотрю что это
Invis1ble
а откуда картинки берутся?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

gmother
из складской программы, в неё загружают фотографы или менеджеры, я точно сам не знаю, но постоянно новые появляются.
Invis1ble
так выясни механизм появления этих картинок, тогда будет понятней, в чем причина

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

killer8080
gmother
GD ругается
Warning: imagecreatefromjpeg(): gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: 65536 extraneous bytes before marker 0xe2
Наверно какая то расширенная версия JPEG, вместо GD используй Imagick для обработки.
stump
Поверх банки на предоставленной фотке есть слово "Fitbar". И похоже что это слово наложено вторым слоем поверх. Я предположил что получается наложение слоев и появляется ошибка. Думаю можно попробовать найти место где происходят наложение и поискать там ошибки.

Цитата
gmother
GD ругается
Warning: imagecreatefromjpeg(): gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: 65536 extraneous bytes before marker 0xe2
Наверно какая то расширенная версия JPEG


По той же причине может быть и false в getimagesize($file). Не думаю что использование Imagick решит проблему.

_____________
Трус не играет в хокей
killer8080
Цитата (stump @ 15.05.2015 - 15:25)
Поверх банки на предоставленной фотке есть слово "Fitbar". И похоже что это слово наложено вторым слоем поверх. Я предположил что получается наложение слоев и появляется ошибка. Думаю можно попробовать найти место где происходят наложение и поискать там ошибки.

А что в JPEG можно сохранять слои?

Цитата (stump @ 15.05.2015 - 15:25)
По той же причине может быть и false в getimagesize($file). Не думаю что использование Imagick решит проблему.

Только что ради эксперимента сделал рсайз, никаких проблем, без getimagesize так же можно прекрасно обходится, у Imagick для этого есть свои средства.
stump
Цитата (killer8080 @ 15.05.2015 - 16:43)
Цитата (stump @ 15.05.2015 - 15:25)
Поверх банки на предоставленной фотке есть слово "Fitbar". И похоже что это слово наложено вторым слоем поверх. Я предположил что получается наложение слоев и появляется ошибка. Думаю можно попробовать найти место где происходят наложение и поискать там ошибки.

А что в JPEG можно сохранять слои?

Если не ошибаюсь то можно сохранить jpg со несведенными слоями. Все слои соберутся в один слой, но он не будет единственным слоем который в то же время и есть бэкграунд. Непосредственно файл со множеством слоев - нет нельзя.

_____________
Трус не играет в хокей
killer8080
Цитата (stump @ 15.05.2015 - 16:05)
Непосредственно файл со множеством слоев - нет нельзя.

Ну тогда и проблем со слоями там быть не может. Похоже что используется какой то расширенный (нестандартный) формат мета данных, о который спотыкается GD и getimagesize имхо.
gmother
Всем добрый день.
Слово Fitbar накладывает фотограф, который снимает и подготавливает фото (логичнее это было бы делать уже на сайте, но так сложилось исторически). С абсолютным большинством картинок с этим словом никаких проблем нет, и фотограф тоже сам не знает, в чём может быть проблема.
В общем, решил дописать скрипт, осуществляющий экспорт картинок, чтобы если getimagesize == false — пересохранял оригинал imagemagick'ом, а если не помогло - слал мне письмо с паникой. Всем большое спасибо.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.