|
(php)Сохранение изображения
#33506054
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
Участник
Откуда: Париж, Франция
Сообщения: 559
|
|
Доброго времени суток,
Подскажите пожалуйста как можно сохранить создное изображение в определеный файл? Я создаю изображение в png, но оно прописывается в код страницы и если перед ним стоит какой то теkcт то 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. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93.
<?php
class QR_Graph
{
var $width = 300 ;
var $height = 300 ;
var $offset_top = 40 ;
var $offset_left = 40 ;
var $offset_right = 5 ;
var $offset_bottom = 30 ;
var $font_name = 'fonts/font.ttf';
var $font_size = 7 ;
var $title = 'No title';
var $data = array();
var $colors = array(0x0000FF, 0xFF0000, 0x00FF00, 0xFFFF00, 0x00FFFF, 0xFF00FF);
function QR_Graph($data, $title)
{
$this->data = $data;
$this->title = $title;
}
function draw()
{
// Считаем ширину столбцов
$col_width = 50 ;//($this->width - $this->offset_left - $this->offset_right) / count($Data);
// Считаем высоту столбца, соответствующего максимальному значению
$col_maxheight = ($this->height - $this->offset_top - $this->offset_bottom);
// Ищем максимальное значение в массиве, соответствующее столбцу максимальной высоты
$max_value = max($this->data);
$image = imagecreatetruecolor($this->width,$this->height) // создаем изображение...
or die('Cannot create image'); // ...или прерываем работу скрипта в случае ошибки
imagefill($image, 0 , 0 , 0xFFFFFF); // белый фон
// рисуем столбцы
$x = $this->offset_left;
$y = $this->offset_top + $col_maxheight;
$i = 0 ;
foreach($this->data as $name => $value) {
imagefilledrectangle( // рисуем сплошной прямоугольник
$image,
$x,
$y - round($value*$col_maxheight/$max_value),
$x + $col_width - 1 ,
$y,
$this->colors[$i++%count($this->colors)]
);
// Выводим текст:
// .. преобразование в Unicode...
$text = $this->win2unicode($name);
// .. расчет координат...
$coord = imagettfbbox($this->font_size, 0 ,$this->font_name,$text);
$text_x = $x + ($col_width - $coord[ 2 ] - $coord[ 0 ]) / 2 ;
$text_y = $this->height - 5 ;
// .. и вывод текста
imagettftext($image,$this->font_size, 0 ,$text_x,$text_y,0x000000,$this->font_name,$text);
$x += $col_width;
}
// Выводим заголовок
$text = $this->win2unicode($this->title);
$coord = imagettfbbox($this->font_size, 0 ,$this->font_name,$text);
$text_x = 30 ;//$x + ($col_width - $coord[ 2 ] - $coord[ 0 ]) / 2 ;
$text_y = ($this->offset_top - $coord[ 1 ] - $coord[ 7 ]) / 2 ;
imagettftext($image,$this->font_size, 0 ,$text_x,$text_y,0x000000,$this->font_name,$text);
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
}
function win2unicode($s)
{
$s = convert_cyr_string($s,'w','i'); // преобразование win1251 -> iso8859- 5
// преобразование iso8859- 5 -> unicode:
for ($result='', $i= 0 ; $i<strlen($s); $i++) {
$charcode = ord($s[$i]);
$result .= ($charcode> 175 )?"".( 1040 +($charcode- 176 )).";":$s[$i];
}
return $result;
}
}
$qr = new QR_Graph($Data, $Title);
$qr->draw();
?>
Заранее спасибо.
|
|
|