GD, phpThumb и точка в левом верхнем углу

newARTix

Новичок
GD, phpThumb и точка в левом верхнем углу

Не смог найти ни в гугле, ни тут никаких упоминаний о проблеме... Неужели никто не сталкивался?
При ресайзе любых (gif, jpeg, png) изображений с помощью phpThumb (http://phpthumb.sourceforge.net/) в изображении-результате вылазит в левом верхнем углу черная точка.
Основная проблема в том, что точка появляется только на хостинге, а на локальном сервере глюк никак не проявляется. При этом скрипт делающий ресайз абсолютно одинаковый, исходные картинки тоже.

phpinfo локальный выдает (php 5.2.4 Windows NT 5.1 build 2600 )
GD Support enabled
GD Version bundled (2.0.34 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.1.9
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled

phpinfo хостинговый (php 5.2.8 Linux 2.6.26-2-vserver-686-bigmem)
GD Support enabled
GD Version bundled (2.0.34 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.2.1
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XPM Support enabled
XBM Support enabled


Причем до того как использовать phpThumb я пользовался ресайзером собственного сочинения и там вылезла та же проблема, но тогда я подумал на глючность своего кода. А тут уже вопрос встал ребром.
Покопавшись в phpThumb выяснил, что точка проявляется в момент использования функции ImageCopyResampled, если ее заменять на ImageCopyResized или кастомную phpthumb_functions::ImageCopyResampleBicubic, то никакой точки нет.

PS Проверил тот же скрипт на другом хостинге, точки нет... Очевидно как-то коряво собрали они свою GD. Если кому интересно, проблема возникла на новосибирском хостинге http://order.1nsk.ru/. Буду писать им в ТП.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
На хостинге на мониторе, на котором ресайзится изображение, битый пиксел
 

newARTix

Новичок
Mr_Max
Очевидно так оно и есть, только битый не пиксель, а либо ячейка памяти, либо сам бинарник GD (или что там у него).

Очень долго не писал в поддержку, так как не мог написать простой скрипт демонстрирующий ошибку, мало ли, может действительно я туплю... После смены очередного скрипта для работы с изображениями (уже ezComponents) совершенно случайно (НЕ ЗНАЮ КАКИХ БОГОВ БЛАГОДАРИТЬ ЗА ЭТУ СЛУЧАЙНОСТЬ!) выяснилось, что при повторном вызове imagecopyresampled она отрабатывает нормально! Только тогда дело сдвинулось с мертвой точки. Написал простейший скрипт:

Код:
error_reporting(E_ALL);
ini_set('display_errors',0);

$sSourceImagePath = dirname(__FILE__) . '/test.jpg';

$aSourceImageProps = getimagesize($sSourceImagePath);

$rSourceImage = imagecreatefromjpeg($sSourceImagePath);

$rAimImage = imagecreatetruecolor(100,100);

if(isset($_GET['rand'])) {
    rand();
}

if(isset($_GET['double'])) {
    imagecopyresampled($rAimImage,$rSourceImage,0,0,0,0,60,20,$aSourceImageProps[0],$aSourceImageProps[1]);
    rand();
}

imagecopyresampled($rAimImage,$rSourceImage,0,0,0,0,60,20,$aSourceImageProps[0],$aSourceImageProps[1]);

header('Content-Type: image/gif');

imagegif($rAimImage);
http://***.ru/test_gd.php
нормальная работа, никаких проблем

http://***.ru/test_gd.php?rand=1
перед вызовом imagecopyresampled вызывается rand() точка появляется

http://***.ru/test_gd.php?rand=1&double=1
после вызова rand() функция imagecopyresampled вызывается дважды,
в результатах работы второго вызова точки нет

http://***.ru/test_gd.php?double=1
функция imagecopyresampled вызывается дважды, однако rand()
вызывается только перед вторым - точка опять есть.


Теперь совершенно уверенно пишу админам.

А себе помечаю этот случай как самую трудноуловимую ошибку которую когда либо приходилось искать. (Предыдущий рекорд был связан с этим же хостером. Но это другая грустная история...)
 
Сверху