60-disegno.php

1<?php
2// in base al numero che riceve piazza un pallino giallo sull'immagine
3
4$botToken = "metti_qui_il_tuo_id";
5$sitoApi = "https://api.telegram.org/bot" . $botToken;
6$contentutoRichiesta = file_get_contents("php://input");
7$messaggioRicevuto = json_decode($contentutoRichiesta, true);
8
9$chatId = $messaggioRicevuto['message']['chat']['id'];
10$x = intval($messaggioRicevuto['message']['text']) * 20;
11
12$immagine = imagecreatefromjpeg("spalla.jpeg");
13// un cerchio giallo più o meno verso destra
14$colorYellow = imageColorAllocate($immagine, 255,255,0);
15imagefilledellipse($immagine,$x,100,50,50,$colorYellow);
16
17// qui recupero i dati senza passare per il disco ma salvare e poi comportarsi
18// con curl come una normale immagine potrebbe essere più semplice
19// (sebbene meno veloce)
20$dati = serializzaImmagine($immagine);
21sendFile($chatId, $dati, "spalla da sfilacciare");
22
23// recupero i dati che rappresentano una immagine senza salvarla su disco
24function serializzaImmagine($immagine){
25    ob_start(); // [1]
26    imagepng($immagine);
27    $datiImmagine = ob_get_contents();
28    ob_end_clean();
29    return $datiImmagine;
30}
31
32function sendFile($chatId, $datiDaInviare, $testo){
33    $postFields = array(
34        'chat_id' => $chatId,
35        // https://www.php.net/manual/en/class.curlstringfile.php
36        'photo' => new CURLStringFile($datiDaInviare,"spalla.png"), // [2]
37        'caption' => $testo
38    );
39
40    $ch = curl_init();
41    curl_setopt($ch, CURLOPT_URL, $GLOBALS['sitoApi']."/sendPhoto");
42    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
43    curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
44    $output = curl_exec($ch);
45}
46

1

https://www.php.net/manual/en/function.ob-start.php

2

Attenzione che se si mettono i dati in encode64 poi curl li mette direttamente nell'oggetto json (e pare che a telegram non piaccia, errore 400) altrimenti nell'oggetto mette solo il nome e poi i dati in altro pezzo del "multipart")