Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: GD не хочет выводить на локальном компе
 
 автор: XPraptor   (10.07.2005 в 19:10)   письмо автору
 
 

Господа, столкнулся с траблой: При использовании функций GD при создании изображений и вывода их сразу в буфер обозревателя - картинки не отображаются.
В инете все ОК. Пробовал код, который здесь приводили по изменению размера изображений на лету - то же самое. Если изменять картинку и сохранять на диск то она нормально сохраняется, а если сразу в браузер то ничего, висит стандартная пиктограмма что здесь картинка а картинка не показывается.
GD версии 2.0.22. все опции - enabled
В чем может быть дело?

   
 
 автор: PHPFan   (10.07.2005 в 21:21)   письмо автору
 
   для: XPraptor   (10.07.2005 в 19:10)
 

Возможно перед выводом не были отосланы заголовки
header('Content-type: image/jpg');
header('Content-type: image/gif');
header('Content-type: image/png');
(В зависимости от формата изображения)

На всякий случай лучше установить error_reporting(E_ALL); на момент отладки
Ещё как вариант, в браузере отключены картинки/включено кеширование изображений.

   
 
 автор: XPraptor   (11.07.2005 в 03:09)   письмо автору
 
   для: PHPFan   (10.07.2005 в 21:21)
 

Заголовки передаются, ошибок никаких, картинки включены.
На счет кэширования - как оно может повлиять на прямой вывод и как избавиться от этой беды?

   
 
 автор: glsv (Дизайнер)   (11.07.2005 в 08:17)   письмо автору
 
   для: XPraptor   (10.07.2005 в 19:10)
 

> Пробовал код, который здесь приводили по изменению размера
В том коде была ошибка - попробуйте использовать его еще раз.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=5325&id_post=31078

   
 
 автор: XPraptor   (11.07.2005 в 12:56)   письмо автору
 
   для: glsv (Дизайнер)   (11.07.2005 в 08:17)
 

Нет, именно последний пробовал. Я же говорю картинка сохраняется и изменяется когда на диск ложишь, а напрямую в браузер не идет.

   
 
 автор: XPraptor   (11.07.2005 в 14:47)   письмо автору
 
   для: glsv (Дизайнер)   (11.07.2005 в 08:17)
 

Млина, нашел глюкен. Оказалось нельзя передавать абсолютный путь к файлу картинки, нужно только относительный от положения скрипта. А теперь кто-нить объясните мне эту фичу пожалуйста.
Кстати, в статистике CNStats графики тоже GD-шкой рисуются и тоже передается абсолютный путь к файлу и так же не выводится у меня на локальном компе, а в нете ок.

   
 
 автор: XPraptor   (12.07.2005 в 14:44)   письмо автору
 
   для: XPraptor   (11.07.2005 в 14:47)
 

С предыдущим глюком разобрался.
Теперь столкнулся еще с одним неудобством: В инете, когда сжимается файл формата .gif а в нем прозрачная основа - она красится в черный цвет, хотя фон создаваемого изображения белый. Что это может быть и как с этим бороться.
Дизайнер - хэлп ми!

   
 
 автор: glsv (Дизайнер)   (14.07.2005 в 12:14)   письмо автору
 
   для: XPraptor   (12.07.2005 в 14:44)
 

Попробуйте вот так:
Файл img.php c функцией масштабирования, которая поддерживает работу с прозрачными GIF-ами

<? 
   
// Здесь можно и нужно добавить код, проверяющий 
   // содержимое переменной $_GET["file"] 
   // Вдруг вам хакер или просто любопытствующий туда 
   // что-нибудь не то передаст 
  
$filename $_GET["file"]; 
  
// Вызываем функцию масштабирования 
  
resizeimg($filename50,50); 

  
// Функция масштабирования 
  
function resizeimg($filename$w$h
  { 
    
// определим коэффициент сжатия изображения, которое будем генерить 
    
$ratio $w/$h
    
// получим размеры исходного изображения 
    
$size_img getimagesize($filename); 
    
// Если размеры меньше, то масштабирования не нужно 
    
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true
    
// получим коэффициент сжатия исходного изображения 
    
$src_ratio=$size_img[0]/$size_img[1]; 

    
// Здесь вычисляем размеры уменьшенной копии, 
    // чтобы при масштабировании сохранились 
    // пропорции исходного изображения 
    
if ($ratio<$src_ratio
    { 
      
$h $w/$src_ratio
    } 
    else 
    { 
      
$w $h*$src_ratio
    } 
    
// создадим пустое изображение по заданным размерам 
    
$dest_img imagecreatetruecolor($w$h);     
      
    if (
$size_img[2]==2)  $src_img imagecreatefromjpeg($filename);                         
    else if (
$size_img[2]==1$src_img imagecreatefromgif($filename);                         
    else if (
$size_img[2]==3$src_img imagecreatefrompng($filename); 

    
// Обработка изображения для поддержки прозрачности
    
$backgr imagecolorallocate($dest_img0,00);
    
imagetruecolortopalette($dest_imgtrue1);
    
imagecolortransparent($dest_img$backgr);

    
// масштабируем изображение     функцией imagecopyresampled() 
    // $dest_img - уменьшенная копия 
    // $src_img - исходной изображение 
    // $w - ширина уменьшенной копии 
    // $h - высота уменьшенной копии           
    // $size_img[0] - ширина исходного изображения 
    // $size_img[1] - высота исходного изображения 

    
imagecopyresampled($dest_img$src_img0000$w$h$size_img[0], $size_img[1]);                   

    
    
// Выводим уменьшенную копию в поток вывода 
    
if ($size_img[2]==2)  header('Content-type: image/jpg');                         
    else if (
$size_img[2]==1header('Content-type: image/gif');                         
    else if (
$size_img[2]==3header('Content-type: image/png'); 
    
// Выводим уменьшенную копию в поток вывода 
    
if ($size_img[2]==2)  imagejpeg($dest_img);                         
    else if (
$size_img[2]==1imagegif($dest_img);                         
    else if (
$size_img[2]==3imagepng($dest_img); 

    
// чистим память от созданных изображений 
    
imagedestroy($dest_img); 
    
imagedestroy($src_img); 
    return 
true;            
  }     
?>


PS: не проверял как теперь работает с JPEG

   
 
 автор: glsv (Дизайнер)   (14.07.2005 в 11:47)   письмо автору
 
   для: XPraptor   (11.07.2005 в 14:47)
 

> А теперь кто-нить объясните мне эту фичу пожалуйста.
Фича, что нужен относительный путь? Хм… обычная фича. Мне кажется, что так удобнее. Переносимость скрипта между хостами улучшается.

   
 
 автор: XPraptor   (14.07.2005 в 15:27)   письмо автору
 
   для: glsv (Дизайнер)   (14.07.2005 в 11:47)
 

Дизайнер -сенкс большой, попробую твой вариант с прозрачностью.
А на счет фичи - абсолютный путь - вообще не работает. Скрипт ничего не выводит в браузер на локальном компе, а в нете выводит. Вот про это я и спрашивал - почему не выводит на локально если указан абсолютный путь.

   
 
 автор: XPraptor   (14.07.2005 в 18:54)   письмо автору
 
   для: glsv (Дизайнер)   (14.07.2005 в 11:47)
 

Дизайнер - вери вери сенкс! Работает как надо! Можешь посмотреть на плоды своего труда здесь: http://www.shop.aon.by/product.php

Я еще переделал функцию для написания по картинкам текста во время вывода, вот приложил свой вариант в атаче. Но по прозрачным gif-ам очень плохо пишет, поэтому пришлось у себя закоментировать этот кусок, а на jpeg-ах вполне сносно.

Еще раз огромное спасибо.

   
 
 автор: glsv (Дизайнер)   (14.07.2005 в 22:06)   письмо автору
 
   для: XPraptor   (14.07.2005 в 18:54)
 

>Можешь посмотреть на плоды своего труда здесь: http://www.shop.aon.by/product.php
Полностью Ваше произведение? Симпатично... только трафикопожирающе :)

   
 
 автор: XPraptor   (15.07.2005 в 01:48)   письмо автору
 
   для: glsv (Дизайнер)   (14.07.2005 в 22:06)
 

Да, мое произведение.
Да в принципе не очень трафик жрет. У меня он бесплатный при соблюдении стандартных условий, а они соблюдаются.

   
 
 автор: glsv (Дизайнер)   (15.07.2005 в 08:13)   письмо автору
 
   для: XPraptor   (15.07.2005 в 01:48)
 

Я про мой трафик, который я трачу во время просмотра сайта :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования