За последние 24 часа нас посетил 36781 программист и 7753 робота. Сейчас ищут 1722 программиста ...

Создание картинки и отправка в telegram

Тема в разделе "PHP для новичков", создана пользователем lVlist, 19 июн 2023.

  1. lVlist

    lVlist Активный пользователь

    С нами с:
    12 фев 2017
    Сообщения:
    20
    Симпатии:
    5
    Народ! Подскажите куда смотреть, необходимо средствами php создать картинку на которой будет таблица на основе данных из БД с последующей отправкой её в telegram при помощи бота.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    в монитор....
     
    don.bidon нравится это.
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    @lVlist наверное для бота абсолютно неважно как создавалась картинка и наоборот, при создании неважно что с ней будет. Не надо лишних сущностей, короче ))) Думай как программист.

    Тебе надо графики на PHP? Есть такие библиотеки и они гуглятся на ура. Но в мире JS эта тема развита гораздо лучше. Или какого рода картинка тебе нужна?
     
  4. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    Генерация изображения из таблицы найдено в интернете. Код нужно править под свой проект.
    PHP:
    1. <?php
    2. $data = array (
    3.     array (
    4.         'name' => 'John',
    5.         'score' => 31004,
    6.         'age' => 31,
    7.         'email' => 'john.doe@gmail.com'
    8.     ),
    9.     array (
    10.         'name' => 'Mary',
    11.         'score' => 21789,
    12.         'age' => 21,
    13.         'email' => 'maryx@amazon.com'
    14.     ),
    15.     array (
    16.         'name' => 'Rumpelstiltskin',
    17.         'score' => 2345,
    18.         'age' => 101,
    19.         'email' => 'rumpel@gmail.com'
    20.     ),
    21.     array (
    22.         'name' => 'Sarah',
    23.         'score' => 345,
    24.         'age' => 25,
    25.         'email' => 'sarah123@aol.com'
    26.     )
    27. );
    28. $_SESSION['imagedata'] = $data;
    29. echo "<IMG src='mytableimage.php'>";
    mytableimage.php

    PHP:
    1. <?php
    2. $data = $_SESSION['imagedata'];
    3. /**
    4. * get max widths for each column
    5. */
    6. $cols = array() ;
    7. $colvals = array();
    8. $count = 0;
    9. foreach ($data as $row ) {
    10.     foreach ($row as $field => $val) {
    11.         if (!isset($cols[$field])) {
    12.             $cols[$field] = strlen($val);
    13.         }
    14.         else {
    15.             $cols[$field] = max($cols[$field], strlen($val));
    16.         }
    17.         $colvals[$count][] = $val;
    18.     }
    19.     $count++;
    20. }
    21. /**
    22. * calculate text widths in pixels
    23. */
    24. $pad = 4;
    25. $colnames = array_keys($cols);
    26. $colwidths = array_values($cols);
    27. foreach ($colwidths as $k=>$v) {
    28.     $colwidths[$k] = $v * imagefontwidth(3) + 2 * $pad;
    29. }
    30. /**
    31. * calc image size and create
    32. */
    33. $rowheight = imagefontheight(3) + 2 * $pad;
    34. $numrows = count ($data) + 1;
    35. $ih = $numrows * $rowheight;
    36. $iw = array_sum ($colwidths);
    37.  
    38. $im = imagecreate($iw, $ih);
    39. $bg = imagecolorallocate($im, 0xAA, 0xD0, 0xD0);
    40. $bdr = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
    41. $tcol = imagecolorallocate($im, 0,0,0);
    42.  
    43. /**
    44. * draw cell borders
    45. */
    46. $x = $y = 0;
    47. for ($y=0; $y < $ih; $y += $rowheight) imageline($im, 0, $y, $iw, $y, $bdr);
    48. for ($i=0, $n=count($colnames); $i <= $n; $i++) {
    49.     imageline($im, $x, 0, $x, $ih, $bdr);
    50.     $x += $colwidths[$i];
    51. }
    52.  
    53. /**
    54. * headings
    55. */
    56. foreach ($colnames as $col=>$text) {
    57.     $x = textCenter($col, $text, $pad, 3, $colwidths);
    58.     $y = $pad;
    59.     imagestring($im, 3, $x, $y, $text, $tcol);
    60. }
    61. /**
    62. * data
    63. */
    64. foreach ($colvals as $row=>$items) {
    65.     foreach ($items as $col=>$text) {
    66.         $y = ($row+1) * $rowheight + $pad;
    67.         $x = is_numeric($text) ? textRight($col,$text,$pad,3,$colwidths) : textLeft($col,$text,$pad,3,$colwidths);
    68.         imagestring($im, 3, $x, $y, $text, $tcol);
    69.     }
    70. }
    71. header ("content-type: image/png");
    72. imagepng($im);
    73.  
    74. /******************************************
    75. * text positioning functions
    76. *******************************************/
    77. function textLeft ($col, $text, $pad, $font, &$colwidths) {
    78.     $x = array_sum(array_slice($colwidths, 0, $col)) + $pad;
    79.     return $x;
    80. }
    81. function textRight ($col, $text, $pad, $font, &$colwidths) {
    82.     $tw = strlen($text) * imagefontwidth($font);
    83.     $x = array_sum(array_slice($colwidths, 0, $col+1)) - $pad - $tw;
    84.     return $x;
    85. }
    86. function textCenter ($col, $text, $pad, $font, &$colwidths) {
    87.     $tw = strlen($text) * imagefontwidth($font);
    88.     $x1 = array_sum(array_slice($colwidths, 0, $col)) ;
    89.     $x2 = array_sum(array_slice($colwidths, 0, $col+1)) ;
    90.     return ($x1 + $x2 - $tw)/2;
    91. }