Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
11 / 11 / 4
Регистрация: 01.02.2011
Сообщений: 111
1

Warning при работе с GD. (а именно с imagepng ())

08.02.2011, 14:35. Показов 6383. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Господа форумчане! подскажите пожалуйста отве на вот такой вопрос:

Написал я некий код, который изменяет размер изображения и записывает его в папку с оригиналом. Но при записи на диск функцией imagepng (). Вылазит ошибка:

Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib failed to initialize compressor -- stream error in C:\Program Files\Apache Group\Apache\htdocs\... on line 1746

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in C:\Program Files\Apache Group\Apache\htdocs\... on line 1746

В нижевыложенном листинге ошибка возникнет на 78 строке.
При этом если поменять imagepng (), на скажем, imagejpeg или imagegif (), то всё нормально уменьшает и записывает - файл читается.

В случае с imagepng () - файл создается, но прочитать его невозможно и вылазит ошибка!

В чем может быть дело - строка "...fatal libpng error..." - наталкивает на мысль что проблема в самой библиотеке ... Но может что-то надо просто еще дополнительно включить/дописать/исправить для нормальной работы функции?

Выкладываю код с комментариями:


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
function createResizedCopy (
        # ----------------------------------------------------------
        $pathToImage,   // путь к файлу
            
        $imgHeight=0,   // высота
        $imgWidth=0,    // ширина
        $imgQuality=70, // качество
        $expand=0,      // растягивать изображение если оно меньше $ImageHeight и $ImageWidth
        $with_bgr=0     // делать на белом фоне
        # ----------------------------------------------------------
            ) {
        
    if (!is_file($pathToImage))
            return false;
        
    $imageinfo      = getimagesize($pathToImage);                       // данные о файле
        
    $baseName       = pathinfo ($pathToImage, PATHINFO_BASENAME );      // полное имя файла           
    $filename       = pathinfo ($pathToImage, PATHINFO_FILENAME );      // имя без расширения
    $path           = pathinfo ($pathToImage, PATHINFO_DIRNAME );       // путь к файлу
    $extension      = pathinfo ($pathToImage, PATHINFO_EXTENSION );     // расширение
        
    $newFilename    = $filename.SMALLPICTURE_PREFIX.".".$extension;     //имя измененного файла
 
 
        
    //Берем за базу высоту. Новая высота приравнена к вводимой. Тогда ширина настолько уменьшится, 
    //насколько уменьшилась новая величина по отношению к старой, т.е. сохраняем пропорции(поля будут сбоку)
    $imgHeight2 = $imgHeight;
    $imgWidth2 = round($imageinfo[0]*($imgHeight2/$imageinfo[1]));
                                
 
    //Но если в результате ширина остается больше чем требуемая, то берем за базу ширину и
    //изменяем высоту относительно ширины в пропорции (поля будут сверху)
    if ($imgWidth2 > $imgWidth){
        $imgWidth2 = $imgWidth;
        $imgWidth2 = (int)round($imageinfo[1]*($imgWidth2/$imageinfo[0]));
    }
                                
    // cоздаем новое изображение на основании загруженного
    switch ($extension) {
        case 'jpg':
            $inimg = imagecreatefromjpeg($pathToImage); 
            break;
        case 'jpeg':
            $inimg = imagecreatefromjpeg($pathToImage); 
            break;                                      
        case 'gif':
            $inimg = imagecreatefromgif($pathToImage); 
            break;
        case 'png':
            $inimg = imagecreatefrompng($pathToImage);
            break;
                    
    }
 
    // cоздаем изображение true color с новыми размерами - "холст"
    $tmp = imagecreatetruecolor($imgWidth2, $imgHeight2);
                                
    // в изображение $tmp перегоняем с новыми размерами $inimg
    imagecopyresampled($tmp, $inimg, 0, 0, 0, 0, $imgWidth2, $imgHeight2, $imageinfo[0], $imageinfo[1]);
                
    // записываем уменьшенное изображение 
    switch ($extension) {
        case 'jpg':
            $resInimg = imagejpeg($tmp, "$path/$newFilename", $imgQuality); 
            break;
        case 'jpeg':
            $resInimg = imagejpeg($tmp, "$path/$newFilename", $imgQuality); 
            break;                                      
        case 'gif':
            $resInimg = imagegif($tmp, "$path/$newFilename", $imgQuality); 
            break;
        case 'png':
            $resInimg = imagepng($tmp, "$path/$newFilename", $imgQuality);
            break;                                      
    }
        
    return $resInimg;
    
}
help!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2011, 14:35
Ответы с готовыми решениями:

Зернистая картинка при imagepng
рисую на канве что либо, а потом создаю из нее картинку методом imagepng она получается вообще...

Ошибка при работе с OpenCV. "Warning C4793: '__asm' : causes native code generation"
Доброго времени суток. У меня при подключении стандартных OpenCV библиотек " cv.h " (к примеру)...

Исключение при работе с pictureBox (задание картинки при работе с формой)
Хочу задать изображение в компоненте pictureBox во время разработки формы, чтоб при запуске проги...

Header в imagepng
Добрый вечер. Пишу небольшую защиту вбиванием инфы в картинку, чтобы ее(инфу) было сложнее достать....

4
191 / 191 / 31
Регистрация: 04.10.2010
Сообщений: 505
08.02.2011, 14:46 2
А ты уверен, что надо $imgQuality передавать?
Цитата Сообщение от ruzab Посмотреть сообщение
imagepng($tmp, "$path/$newFilename", $imgQuality);
Просто этот агрумент появился в версии php 5.1.2. А у тебя какая?
Попробуй убрать этот аргумент.
PHP
1
imagepng($tmp, "$path/$newFilename");
0
11 / 11 / 4
Регистрация: 01.02.2011
Сообщений: 111
11.02.2011, 17:43  [ТС] 3
А ты уверен, что надо $imgQuality передавать?
Ну да, в мануале написано что это возможно.

bool imagepng ( resource $image [, string $filename [, int $quality [, int $filters ]]] )

Просто этот агрумент появился в версии php 5.1.2. А у тебя какая?
Если верить информации которая записана для службы Apache, к нему прикручен php 5.2.10 ... Должен понимать. Думаю еслибы версия была более старая, то он бы ругался call to undefined function imagepng() ... или что-то типа этого...

Попробуй убрать этот аргумент.
Весь прикол в том что функцию мне надо оставить, а она не работает ...
0
191 / 191 / 31
Регистрация: 04.10.2010
Сообщений: 505
11.02.2011, 23:03 4
Попробуй убрать этот аргумент.
Это значит убрать $imgQuality и в результате останется...
PHP
1
imagepng($tmp, "$path/$newFilename");
0
11 / 11 / 4
Регистрация: 01.02.2011
Сообщений: 111
13.02.2011, 19:07  [ТС] 5
Это значит убрать $imgQuality и в результате останется...
Да, я тупанул.
Спасибо за подсказ. Убрал - действительно заработало. Только отчего непонятно в мануале пишут что качество можно менять, а реально - ошибка вылетает?
0
13.02.2011, 19:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2011, 19:07
Помогаю со студенческими работами здесь

Вывод картинки imagepng
Доброго времени суток!!! Написал вывод картинки, с генерированной средствами GD. Локально на...

Грабли при работе STM32f4 при работе с ftp
Столкнулся с такой проблемой. Работаю в связке Stm32f4+cinterion bgs2e8 при сливании файла с ftp,...

Imagepng вместо изображения маленький квадратик
<?php $scr = imagecreatefrompng('test.png'); header ("Content-type: image/png");...

Ошибка при запуске, а именно при входе
Помогите разобраться при запуске вылазит такая ошибка(рис).

Как именно в методах расширения указать, что переходить нужно именно главный контроллер?
В проекте есть несколько Areas. Маршрутизация нстроена так (для наглядности сократил) public...

Warning при компиляции при чтении из msado15.dll
Warning:workvcmfcmymfcdebugmsado15.tlh(405) : warning C4146: unary minus operator applied to...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru