日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ESP32-S3 LVGL http下载B站头像 JPG显示

發布時間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ESP32-S3 LVGL http下载B站头像 JPG显示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在用ESP32S3獲取B站JPG頭像進行顯示。記錄一下,開發板鏈接:

ESP32-S3 LVGL 開發板 人工智能語音識別 人臉識別 觸摸 音頻-淘寶網 (taobao.com)

直接上代碼:

第一種下載方式:

/*獲取B站頭像JPG文件buffer */ static esp_err_t face_http_event_handler(esp_http_client_event_t *evt) {static char *output_buffer; // Buffer to store response of http request from event handlerstatic int output_len; // Stores number of bytes readswitch (evt->event_id){case HTTP_EVENT_ERROR:ESP_LOGI(TAG, "HTTP_EVENT_ERROR");break;case HTTP_EVENT_ON_CONNECTED:ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED");break;case HTTP_EVENT_HEADER_SENT:ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT");break;case HTTP_EVENT_ON_HEADER:ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);break;case HTTP_EVENT_ON_DATA:printf("HTTP_EVENT_ON_DATA, len=%d\n", evt->data_len);//如果404或者502// if (evt->data_len == 150 || evt->data_len == 146)// return ESP_OK;// printf("%.*s\n", evt->data_len, (char *)evt->data);// if (!esp_http_client_is_chunked_response(evt->client)) {// // Write out data// printf("%.*s", evt->data_len, (char*)evt->data);// }if (!esp_http_client_is_chunked_response(evt->client)){//ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA !esp_http_client_is_chunked_response");// If user_data buffer is configured, copy the response into the bufferif (face_buffer) /*如果已經申請了內存 就直接復制接收到的數據*/{memcpy(face_buffer + output_len, evt->data, evt->data_len);}else /*如果沒有申請*/{if (face_buffer == NULL) /*申請一個http長度的內存來保存數據*/{face_buffer = (char *)malloc(esp_http_client_get_content_length(evt->client));output_len = 0;if (face_buffer == NULL){ESP_LOGE(TAG, "Failed to allocate memory for output buffer");return ESP_FAIL;}}memcpy(face_buffer + output_len, evt->data, evt->data_len); //拷貝數據}output_len += evt->data_len; //記錄下載進度}break;case HTTP_EVENT_ON_FINISH:ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH");break;case HTTP_EVENT_DISCONNECTED:ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");break;}return ESP_OK; } void get_face_jpg(char *bili_uid) {static esp_http_client_config_t config = {.url = "https://whycan.com/files/members/4115/11111.png",//這里是你的B站頭像鏈接.event_handler = face_http_event_handler,.buffer_size = 3 * 1024,.timeout_ms = 4000,.path = "/get",.transport_type = HTTP_TRANSPORT_OVER_TCP,};esp_http_client_handle_t client = esp_http_client_init(&config);esp_http_client_set_header(client, "Accept", "*/*");esp_http_client_set_header(client, "Accept-Encoding", "identity");esp_http_client_set_header(client, "User-Agent", "PostmanRuntime/7.24.1");esp_http_client_set_header(client, "Connection", "keep-alive");esp_http_client_set_header(client, "Content-Type", "application/json");// esp_err_t err = esp_http_client_open(client, 0);esp_err_t err = esp_http_client_perform(client);if (err == ESP_OK){ESP_LOGE(TAG, "HTTP GET Status = %d, content_length = %d",esp_http_client_get_status_code(client),esp_http_client_get_content_length(client));}else{ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));}esp_http_client_cleanup(client); }

以上方式是獲取一個固定鏈接的圖片存到face_buffer 這個char*里,下一種是先根據B站id來獲取頭像圖片的url,再根據url來獲取圖片。

B站個人信息API接口:https://api.bilibili.com/x/space/acc/info?mid=59041601

在瀏覽器里輸入以上鏈接可以看到:

{"code":0,"message":"0","ttl":1,"data":{"mid":59041601,"name":"Kevincoooool","sex":"男","face":"http://i2.hdslb.com/bfs/face/bce14f5e3af4bca480fc7de227986ba304507078.jpg","face_nft":0,"sign":"Jlink DAP OpenMV 淘寶店鋪:酷世DIY","rank":10000,"level":5,"jointime":0,"moral":0,"silence":0,"coins":1249,"fans_badge":true,"fans_medal":{"show":true,"wear":false,"medal":null},"official":{"role":0,"title":"","desc":"","type":-1},"vip":{"type":0,"status":0,"due_date":0,"vip_pay_type":0,"theme_type":0,"label":{"path":"","text":"","label_theme":"","text_color":"","bg_style":0,"bg_color":"","border_color":""},"avatar_subscript":0,"nickname_color":"","role":0,"avatar_subscript_url":""},"pendant":{"pid":0,"name":"","image":"","expire":0,"image_enhance":"","image_enhance_frame":""},"nameplate":{"nid":10,"name":"見習偶像","image":"http://i0.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png","image_small":"http://i2.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png","level":"普通勛章","condition":"所有自制視頻總播放數\u003e=10萬"},"user_honour_info":{"mid":0,"colour":null,"tags":[]},"is_followed":false,"top_photo":"http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png","theme":{},"sys_notice":{},"live_room":{"roomStatus":1,"liveStatus":0,"url":"https://live.bilibili.com/2153512","title":"啥呀這是","cover":"http://i0.hdslb.com/bfs/live/user_cover/20e11be91ed85436a8800dafb3d3550736cb1899.jpg","online":0,"roomid":2153512,"roundStatus":0,"broadcast_type":0},"birthday":"03-08","school":{"name":"成都信息工程大學"},"profession":{"name":""},"tags":null,"series":{"user_upgrade_status":3,"show_upgrade_window":false}}}

其中?"face":"http://i2.hdslb.com/bfs/face/bce14f5e3af4bca480fc7de227986ba304507078.jpg" 就是我們的頭像圖片鏈接,再把這個鏈接放到以上方式的url中即可。

上代碼:

esp_err_t cjson_face(char *text) {cJSON *root_ksdiy, *psub_ksdiy;char *index = strchr(text, '{');printf("face json:%s\n", text);if (index == NULL){return ESP_FAIL;}else{strcpy(text, index);root_ksdiy = cJSON_Parse(text);if (root_ksdiy != NULL){psub_ksdiy = cJSON_GetObjectItem(root_ksdiy, "data");if (psub_ksdiy != NULL){cJSON *name = cJSON_GetObjectItem(psub_ksdiy, "name");wp_fans.name = name->valuestring;cJSON *face_url = cJSON_GetObjectItem(psub_ksdiy, "face");wp_fans.face_url = face_url->valuestring;ESP_LOGI(TAG, "獲取頭像URL成功 name:%s face_url:%s\n", wp_fans.name, wp_fans.face_url);memset((char *)url_buff, 0, 256);sprintf(url_buff, "%s", face_url->valuestring);_get_face_url = true;}else{_get_face_url = false;ESP_LOGI(TAG, "獲取頭像URL,請檢查uid");}}else{return ESP_FAIL;}cJSON_Delete(root_ksdiy);}return ESP_OK; } static esp_err_t bilibili_face_http_event_handler(esp_http_client_event_t *evt) {switch (evt->event_id){case HTTP_EVENT_ERROR:ESP_LOGI(TAG, "HTTP_EVENT_ERROR");break;case HTTP_EVENT_ON_CONNECTED:ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED");break;case HTTP_EVENT_HEADER_SENT:ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT");break;case HTTP_EVENT_ON_HEADER:ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);break;case HTTP_EVENT_ON_DATA:printf("HTTP_EVENT_ON_DATA, len=%d\n", evt->data_len);//如果404或者502if (evt->data_len == 150 || evt->data_len == 146)return ESP_OK;// printf("%.*s\n", evt->data_len, (char *)evt->data);cjson_face((char *)evt->data);break;case HTTP_EVENT_ON_FINISH:ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH");break;case HTTP_EVENT_DISCONNECTED:ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");break;}return ESP_OK; } void get_face_url(char *bili_uid) {static char post_url[256] = {0};memset((char *)post_url, 0, 256);static esp_http_client_config_t config = {// .url = "https://api.bilibili.com/x/relation/stat?vmid=59041601&jsonp=jsonp",.event_handler = bilibili_face_http_event_handler,.buffer_size = 3 * 1024,.timeout_ms = 4000,.path = "/get",.transport_type = HTTP_TRANSPORT_OVER_TCP,};sprintf(post_url, "https://api.bilibili.com/x/space/acc/info?mid=%s", bili_uid);config.url = post_url;esp_http_client_handle_t client = esp_http_client_init(&config);esp_http_client_set_header(client, "Accept", "*/*");esp_http_client_set_header(client, "Accept-Encoding", "identity");esp_http_client_set_header(client, "User-Agent", "PostmanRuntime/7.24.1");esp_http_client_set_header(client, "Connection", "keep-alive");esp_http_client_set_header(client, "Content-Type", "application/json");esp_err_t err = esp_http_client_perform(client);if (err == ESP_OK){ESP_LOGE(TAG, "HTTP GET Status = %d, content_length = %d",esp_http_client_get_status_code(client),esp_http_client_get_content_length(client));}else{ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));}esp_http_client_cleanup(client); }

最后,獲取了B站的頭像buffer,我們還要顯示出來,在這里要使用到lvgl的split jpg庫并對庫做一些修改,因為原來的庫是不會縮放jpg的,我們得到的頭像buffer一般比較大,顯示出來整個屏幕都沒了,所以需要縮小,

?

.H文件中增加以下define:

/********************** DEFINES*********************//* Scaling factor */ // #define LV_TJPGD_CONFIG_SCALING_FACTOR_NONE //#define LV_TJPGD_CONFIG_SCALING_FACTOR_1_2 #define LV_TJPGD_CONFIG_SCALING_FACTOR_1_4 //#define LV_TJPGD_CONFIG_SCALING_FACTOR_1_8/* When setting scaling factor to none we should set JD_USE_SCALE to 0* set it to 1 otherwise */ #if defined (LV_TJPGD_CONFIG_SCALING_FACTOR_NONE)#define LV_TJPGD_SCALING_FACTOR 0#define LV_TJPGD_SCALING_FACTOR_DIV 1 #elif defined (LV_TJPGD_CONFIG_SCALING_FACTOR_1_2)#define LV_TJPGD_SCALING_FACTOR 1#define LV_TJPGD_SCALING_FACTOR_DIV 2 #elif defined (LV_TJPGD_CONFIG_SCALING_FACTOR_1_4)#define LV_TJPGD_SCALING_FACTOR 2#define LV_TJPGD_SCALING_FACTOR_DIV 4 #elif defined (LV_TJPGD_CONFIG_SCALING_FACTOR_1_8)#define LV_TJPGD_SCALING_FACTOR 3#define LV_TJPGD_SCALING_FACTOR_DIV 8 #else#error "Invalid TJPGD scaling factor configuration" #endif // defined

?最后顯示:

lv_img_dsc_t bili_face = {.header.always_zero = 0,.header.w = 300,.header.h = 300,.data_size = 300 * 300 * 2,.header.cf = LV_IMG_CF_RAW,.data = NULL, };img_face = lv_img_create(scr_body, NULL);lv_obj_add_style(img_face, LV_IMG_PART_MAIN, &style_img);lv_obj_set_pos(img_face, APP_WIN_WIDTH / 2 - 40, 70);bili_face.data = (uint8_t *)face_buffer;//把在線獲取的buffer給imglv_img_set_src(img_face, &bili_face);

?

總結

以上是生活随笔為你收集整理的ESP32-S3 LVGL http下载B站头像 JPG显示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美精品a区 | 国产伦精品一区二区三区妓女 | 一区二区高清在线观看 | 精品午夜一区二区三区在线观看 | 亚洲精选国产 | 日韩女人性猛交 | 99久久婷婷国产综合精品 | 日韩视频在线观看一区 | 亚洲一区二区三区在线视频观看 | 亚洲熟区| 日韩欧美在线观看 | 亚洲ⅴ国产v天堂a无码二区 | www.日批| 97色干| 76少妇精品导航 | 国产精品88av | 琪琪原网址 | 国产高清在线免费观看 | 欧美国产日韩在线 | 亚洲精品高清在线观看 | 国产精品对白刺激久久久 | 日本3p视频 | 久久国产情侣 | 午夜大片在线观看 | 手机福利视频 | a v视频在线播放 | 日日干天天 | 白浆影院 | 朴银狐电影中文在线看 | 国产成人片 | 婷婷激情在线 | 日本免费电影一区二区三区 | www.狠狠艹 | 99视频免费看| 亚州中文 | 4444亚洲人成无码网在线观看 | 欧美黑人性xxx | 国产精品扒开腿做爽爽 | 久久综合一区二区三区 | 久操网在线 | jjzz日本视频 | 亚洲人成网址 | 视频福利在线观看 | 青青操在线观看 | 国产老头和老头xxxx× | 精品人妻一区二区三区日产乱码卜 | 欧美少妇激情 | 麻豆视频传媒入口 | 一区二区在线免费观看 | 国产乱子伦精品无码专区 | 男女日屁视频 | 日韩 欧美 亚洲 国产 | 黄色小视频在线看 | 蜜桃av免费在线观看 | 538任你躁在线精品免费 | 国产女人18毛片水18精 | 国产精品天天操 | 国产 日韩 一区 | 亚洲一区二区三区电影在线观看 | 极品美妇后花庭翘臀娇吟小说 | 三年电影在线观看 | 久久久免费av | 精品久久久无码中文字幕边打电话 | 成人av免费网址 | 97精品人妻一区二区三区 | 老妇女玩小男生毛片 | 99re这里只有精品66 | 亚洲欧美动漫 | 国产精品刘玥久久一区 | 吖v在线 | 久久久久久国产精品一区 | 四房婷婷 | 国产suv精品一区二区69 | 麻豆一区二区三区四区 | 毛片黄片免费看 | 丰满人妻一区二区三区53 | 爱情岛论坛自拍亚洲品质极速最新章 | 伊人资源网 | 国产成人在线观看免费网站 | av小说免费在线观看 | 日韩av一区二区三区在线 | 国产精品16p| 视色视频在线观看 | 在线观看亚洲大片短视频 | 制服丝袜快播 | www.777奇米影视 | 国产精品一品二区三区的使用体验 | 中国农村一级片 | 亚洲国产成人精品一区二区三区 | 欧美另类第一页 | 夜夜操av| av网址在线免费观看 | 日本a级一区 | 中文人妻熟女乱又乱精品 | 欧美日本一二三区 | 国产人妻精品久久久久野外 | 91午夜视频在线观看 | 日本在线视频一区二区三区 | 激情的网站 |