gmother
15.05.2015 - 14:30
Сталкиваюсь уже не в первый раз.
Пример картинки:
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
15.05.2015 - 15:03
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
$file = "bcaa-6000-2.jpg";
$info = getimagesize($file);
var_dump($info);
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Думаю что ответ где-то тут
Цитата (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
15.05.2015 - 15:17
Можно каким-нибудь jpegoptim'ом пройтись, заодно уменьшив размер и убрав палевный exif.
_____________
echo '<pre>',print_r($var, 1);die;
root@server# make love && war
gmother
15.05.2015 - 15:24
Invis1ble: Ошибок никаких нет, я в логах смотрел. Добавил ваш код в
http://mavrin.net/test.phpstump: Спасибо, да, пересохранение помогает, но это не наш метод. Оно загружается и обновляется само, и в довольно большом количестве.
Хотя, если лучше идей не будет, напишу скрипт, чтобы парсил все папки картинок и пересохранял те, которые возвращают false, imagemagick'ом.
gmother
15.05.2015 - 15:25
Цитата (kristall @ 15.05.2015 - 15:17) |
Можно каким-нибудь jpegoptim'ом пройтись, заодно уменьшив размер и убрав палевный exif. |
спасибо, посмотрю что это
Invis1ble
15.05.2015 - 15:26
gmother
15.05.2015 - 15:37
из складской программы, в неё загружают фотографы или менеджеры, я точно сам не знаю, но постоянно новые появляются.
Invis1ble
15.05.2015 - 15:58
так выясни механизм появления этих картинок, тогда будет понятней, в чем причина
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
killer8080
15.05.2015 - 16:21
gmother
GD ругается
Warning: imagecreatefromjpeg(): gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: 65536 extraneous bytes before marker 0xe2
Наверно какая то расширенная версия JPEG, вместо GD используй Imagick для обработки.
Поверх банки на предоставленной фотке есть слово "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
15.05.2015 - 16:43
Цитата (stump @ 15.05.2015 - 15:25) |
Поверх банки на предоставленной фотке есть слово "Fitbar". И похоже что это слово наложено вторым слоем поверх. Я предположил что получается наложение слоев и появляется ошибка. Думаю можно попробовать найти место где происходят наложение и поискать там ошибки. |
А что в JPEG можно сохранять слои?
Цитата (stump @ 15.05.2015 - 15:25) |
По той же причине может быть и false в getimagesize($file). Не думаю что использование Imagick решит проблему. |
Только что ради эксперимента сделал рсайз, никаких проблем, без getimagesize так же можно прекрасно обходится, у Imagick для этого есть свои средства.
Цитата (killer8080 @ 15.05.2015 - 16:43) |
Цитата (stump @ 15.05.2015 - 15:25) | Поверх банки на предоставленной фотке есть слово "Fitbar". И похоже что это слово наложено вторым слоем поверх. Я предположил что получается наложение слоев и появляется ошибка. Думаю можно попробовать найти место где происходят наложение и поискать там ошибки. |
А что в JPEG можно сохранять слои?
|
Если не ошибаюсь то можно сохранить jpg со несведенными слоями. Все слои соберутся в один слой, но он не будет единственным слоем который в то же время и есть бэкграунд. Непосредственно файл со множеством слоев - нет нельзя.
_____________
Трус не играет в хокей
killer8080
15.05.2015 - 17:09
Цитата (stump @ 15.05.2015 - 16:05) |
Непосредственно файл со множеством слоев - нет нельзя. |
Ну тогда и проблем со слоями там быть не может. Похоже что используется какой то расширенный (нестандартный) формат мета данных, о который спотыкается GD и getimagesize имхо.
gmother
18.05.2015 - 15:43
Всем добрый день.
Слово Fitbar накладывает фотограф, который снимает и подготавливает фото (логичнее это было бы делать уже на сайте, но так сложилось исторически). С абсолютным большинством картинок с этим словом никаких проблем нет, и фотограф тоже сам не знает, в чём может быть проблема.
В общем, решил дописать скрипт, осуществляющий экспорт картинок, чтобы если getimagesize == false — пересохранял оригинал imagemagick'ом, а если не помогло - слал мне письмо с паникой. Всем большое спасибо.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.