Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблема вывода картинки через URL
Форумы портала PHP.SU » » Графика в PHP » Проблема вывода картинки через URL

Страниц (1): [1]
 

1. Wolf Bloody - 09 Февраля, 2012 - 22:27:03 - перейти к сообщению
Знатоки, подскажите в чем может быть беда? Измучился уже! Написал простой клас по маштабированию картинок. Идея на лету создавать превьюшки картинок, не сохраняя в файл, и выводить их на страницу. Но столкнулся с проблемой что не выводит нифига. Тестирую самый простой код:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $im=imagecreate(100,100);
  4. imagecolorallocate($im,255,0,0);
  5. header("Content-type: image/jpeg");
  6. imagejpeg($im,'',100);
  7. ?>
  8. <img src="<?=$_SERVER['PHP_SELF']?>">
  9.  


отображает картинку как будто битая ссылка.в чем можт быть дело?
2. Panoptik - 09 Февраля, 2012 - 22:33:30 - перейти к сообщению
imagejpeg и так выводит картинку. я делал следующим образом
PHP:
скопировать код в буфер обмена
  1. imagejpeg($im);
  2. $data = ob_get_contents();
  3. echo '<img src="data:image/jpeg;base64'.base64_encode($data).'" />
  4.  

(Добавление)
или второй вариант. файл в котором генерируется картинка находится отдельно например image.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $im=imagecreate(100,100);
  4. imagecolorallocate($im,255,0,0);
  5. header("Content-type: image/jpeg");
  6. imagejpeg($im,'',100);
  7. ?>
а при выводе в своем файле index.php делайте так
CODE (html):
скопировать код в буфер обмена
  1. <img src="image.php">
3. evgenijj - 09 Февраля, 2012 - 23:00:06 - перейти к сообщению
Вот ты сообщил браузеру, что ВСЕ ДАЛЕЕ - картинка
header("Content-type: image/jpeg");
А после этого передумал и решил для себя -- добавлю немного html (текста)
<img src="..." />

Вот представь себе -- зашел ты в бар, попросил бармена налить пива. Он налил тебе 80% пива, а потом еще 20% воды. Ты пьешь -- и ощущуаешь -- что-то не то...

Это я к чему -- бармен немножко передумал (налить пива), ты немножко передумал (отправлять картинку).... А как браузер (после того как ты ему сообщил, что отправляешь картинку) должен догадаться, что ты передумал (и вместе с картинкой отправил html)?
4. Wolf Bloody - 10 Февраля, 2012 - 05:57:06 - перейти к сообщению
Видать я не совсем удачный вариант теста выбрал. Сорри. Давайте тогда я выложу код. который есть истинным.
Класс по обрабатыванию картинок
PHP:
скопировать код в буфер обмена
  1. <? class ThumbnailImage
  2. {
  3.         private $image;
  4.         private $quality = 100;
  5.         private $mimetype;
  6.         private $imageproperties = array();
  7.         private $initialfilesize;
  8.        
  9.         public function __construct($file, $thumbnailsize=100)
  10.         {
  11.                 //проверить файл
  12.                 is_file($file) or die("Файл: $file не существует.");
  13.                 $this->initialfilesize = filesize($file);
  14.                 $this->imageproperties = getimagesize($file) or die ("Недопустимый тип файла.");
  15.                 $this->mimetype = image_type_to_mime_type($this->imageproperties[2]);
  16.                 //создать изображение
  17.                 switch($this->imageproperties[2])
  18.                 {
  19.                         case IMAGETYPE_JPEG:
  20.                                 $this->image = imagecreatefromjpeg($file);
  21.                                 break;
  22.                         case IMAGETYPE_GIF:
  23.                                 $this->image = imagecreatefromgif($file);
  24.                                 break;
  25.                         case IMAGETYPE_PNG:
  26.                                 $this->image = imagecreatefrompng($file);
  27.                                 break;
  28.                         default:
  29.                                 die("Не могу создать изображение.");
  30.                 }
  31.                 $this->createThumb($thumbnailsize);
  32.         }
  33.        
  34.         private function createThumb($thumbnailsize)
  35.         {
  36.                 //массив элементов для хранения ширины и высоты
  37.                 $srcW = $this->imageproperties[0];
  38.                 $srcH = $this->imageproperties[1];
  39.                 //изменять если только больше максимума
  40.                 if($srcW > $thumbnailsize || $srcH > $thumbnailsize)
  41.                 {
  42.                         $reduction = $this->calculateReduction($thumbnailsize);
  43.                         //получить пропорциональные величины
  44.                         $desW = $srcW/$reduction;
  45.                         $desH = $srcH/$reduction;
  46.                         $copy = imagecreatetruecolor($desW, $desH);
  47.                         imagecopyresampled($copy,$this->image,0,0,0,0,$desW, $desH, $srcW, $srcH) or die ("Ошибка при копировании изображения");
  48.                         //уничтожить оригенал
  49.                         imagedestroy($this->image);
  50.                         $this->image = $copy;
  51.                 }
  52.         }
  53.  
  54.         private function calculateReduction($thumbnailsize)
  55.         {
  56.                 $srcW = $this->imageproperties[0];
  57.                 $srcH = $this->imageproperties[1];
  58.                 //подогнать
  59.                 if($srcW  < $srcH)
  60.                 {
  61.                         $reduction = round($srcH/$thumbnailsize);
  62.                 }
  63.                 else
  64.                 {
  65.                         $reduction = round($srcW/$thumbnailsize);
  66.                 }
  67.                 return $reduction;
  68.         }
  69.        
  70.         public function __destruct()
  71.         {
  72.                 if(isset($this->image))
  73.                 {
  74.                         imagedestroy($this->image);
  75.                 }
  76.         }
  77.  
  78.         public function getImage()
  79.         {
  80.                 header("Content-type: ".$this->mimetype."\n");
  81.                 switch($this->imageproperties[2])
  82.                 {
  83.                         case IMAGETYPE_JPEG:
  84.                                 imagejpeg($this->image,"",$this->quality);
  85.                                 break;
  86.                         case IMAGETYPE_GIF:
  87.                                 imagegif($this->image);
  88.                                 break;
  89.                         case IMAGETYPE_PNG:
  90.                                 imagepng($this->image,"",$this->quality);
  91.                                 break;
  92.                         default:
  93.                                 die ("Не могу создать изображение");
  94.                 }
  95.         }
  96.        
  97.         public function getMimeType()
  98.         {
  99.                 return $this->mimetype;
  100.         }
  101.        
  102.         public function setQuality($quality)
  103.         {
  104.                 if($quality > 100 || $quality < 1)
  105.                 {
  106.                         $quality = 75;
  107.                 }
  108.                 if($this->imageproperties[2] == IMAGETYPE_JPEG)
  109.                 {
  110.                         $this->quality = $quality;
  111.                 }
  112.         }
  113.        
  114.         public function getQuality()
  115.         {
  116.                 $quality = null;
  117.                 if($this->imageproperties[2] == IMAGETYPE_JPEG)
  118.                 {
  119.                         $quality = $this->quality;
  120.                 }
  121.                 return $quality;
  122.         }
  123.        
  124.         public function getInitialFileSize()
  125.         {
  126.                 return $this->initialfilesize;
  127.         }
  128. }
  129.  
  130. ?>


файл который инициирует класс

PHP:
скопировать код в буфер обмена
  1. require "ThumbnailImage.php";
  2. $path = $_GET["path"];
  3. $maxsize = $_GET["size"];
  4. if(!isset($maxsize))
  5. {
  6.         $maxsize=100;
  7. }
  8. if(isset($path))
  9. {
  10.         $thumb = new ThumbnailImage($path, $maxsize);
  11.         echo $thumb->getImage();
  12.         echo $thumb->test();
  13.        
  14. }


Эо лежит уже в файле который загружается.

CODE (html):
скопировать код в буфер обмена
  1. <img src=\"getthumb.php?path=$path\" style=\"border:1px solid black;margin-top:20px;\" alt=\"$value\" />


вот это не хочет показывать картинку. Хотя класс работает, если я в imagejpeg($this->image,"",$this->quality); указываю 2-ой параметр, она сохраняется в нужном размере.

P.S. О классе не судите строго. только-только начал изучение ООП.

 

Powered by ExBB FM 1.0 RC1