При аплоаде бьется gif

vada

Новичок
При аплоаде бьется gif

Для загрузки картинок пользую самописный код (ImageMagick не использую), который работает уже несколько лет без проблем. Это - первая :)

Так вот, на днях случайно обнаружил, то при попытке загрузить gif-картинки, взятые из некоей микрософтовской (кажется, офисной) подборки, картинка изменяется, "портится" - визуально такое впечатление, что горизонтальные однопиксельные линии картинки сдвигаются относительно друг друга.
Пробовал загружать на пару "чужих" сайтов - грузилось нормально. Но какой на них механизм загрузки - не знаю.
Если же картинку предварительно открыть в редакторе и (ничего в ней не меняя) пересохранить опять же в gif - то аплоад происходит нормально и у меня.

При загрузке getimagesize тип картинки и размеры определяет корректно. Исключение - на "бьющемся" гифе getimagesize не возвращает [bits] => 3 (вообще такого элемента массива нет), который присутсвует для "небьющегося" гифа.
GD 2.0.28

Буду благодарен, если подскажете, в чем проблема и в каком направлении искать решение.
 

dimagolov

Новичок
ты бы ссылкуу на картинку проблемную и код, который ее изменяет выложил, что ли...
 

kruglov

Новичок
А если картинку эту чисто сразу браузером посмотреть, локально, она нормально отображается?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
горизонтальные однопиксельные линии картинки сдвигаются относительно друг друга.
Interlaced gif ?

-~{}~ 25.08.08 19:12:

Покажите код, выполняемый при загрузке.
 

vada

Новичок
dimagolov
Кусок кода, который обрабатывает изображение в данном случае (выкинул всё, не относящееся к ситуации)
PHP:
if (is_uploaded_file($this->loadfile['tmp_name'])) {
    $im = imagecreatefromgif($this->loadfile['tmp_name']);
    $this->to_dir .= '/'.$this->img_name.".gif";
    Imagegif($im, $this->to_dir);
    ImageDestroy($im);
    return filesize($this->to_dir);
}
картинки (бьющаяся, небьющаясяб и уже битая) тут: http://files.mail.ru/B1JRSH

kruglov
Да, локально браузером отображается нормально

флоппик
>>>Interlaced gif ?
нет. "Плохой" файл сохранял как Interlaced и нет - оба пересохраненные грузятся нормально в обоих случаях

-----------------------
поменял ссылку, добавил в архив битый файл
 

флоппик

promotor fidei
Команда форума
Партнер клуба
vada, пардон, а зачем такие сложности? Неужели его нельзя просто скопировать?
 

vada

Новичок
код в целом предусматривает различные ситации, в том числе изменения размеров, прорисовывания рамок, и тп. Я привел усеченный код.
Ну и мне просто хочется разобраться в ситуации
 

dimagolov

Новичок
vada, посмотри в бинарном редакторе плохой файл. Там в начале есть заголовок "Software: Microsoft Office", видимо он не совсем корректно прописан. Видимо из-за этого ACDSee непонятные точки в первой строке отрисовывает.
 

vada

Новичок
dimagolov
Каких-то непонятных точек в первой строке я не вижу, сдвижка полос вроде бы "гладкая", ну да ладно. Понятно, что что-то внутри файла криво прописано, иначе бы не бился.

Просьба вот какая. Я с ImageMagic-ом не работал, и прям счас его поднимать мне недосуг. Если вдруг есть у кого под рукой скрипт загрузки, использующий ИмаджМэджик - попробуйте, плиз, через него загрузить файл bad.gif отсюда http://files.mail.ru/B1JRSH и сообщите результат сюда - в случае положительного результата по крайней мере буду знать, что есть работающая альтернатива.

Спасибо всем за попытку помочь.
 

phprus

Moderator
Команда форума
fixxxer
Не думаю, что он может выборочно бить только картинки от майкрософта.
 

vada

Новичок
Автор оригинала: fixxxer
русский апач?
нет. в одном случае Apache/2.2.2 (Fedora), в другом Apache/1.3.33 (Win32)

Но натолкнул на мысль. Проверил работу скрипта на одном из доступных сайтов, что на забугорном хостинге, там GD посвежее - 2.0.34. И "Бьющаяся" картинка загрузилась нормально. Попробую покурить в этом направлении.

-~{}~ 27.08.08 00:34:

Да, до PHP 5.2.2 идет GD 2.0.28 на ней картинка бьется, начиная с 5.2.2 - GD 2.0.34 и на ней бьющая картинка грузится нормально
 
Сверху