如何从Telegram返回的图片列表中筛选最高清版本对应的file_id
实现代码
你可以直接使用以下逻辑完成高清图片筛选,代码兼容你当前的使用场景:
var contents = JSON.parse(e.postData.contents); var photoList = contents.channel_post.photo; // 初始化最大分辨率记录、对应图片下标 let maxLongSide = 0; let targetPhotoIndex = 0; // 遍历所有图片规格 for (let i = 0; i < photoList.length; i++) { const currentPhoto = photoList[i]; // 计算当前图片的长边长度 const currentLongSide = Math.max(currentPhoto.width, currentPhoto.height); // 匹配更长边的图片 if (currentLongSide > maxLongSide) { maxLongSide = currentLongSide; targetPhotoIndex = i; } } // 拿到最终需要的file_id const targetFileId = photoList[targetPhotoIndex].file_id; Logger.log(targetFileId); // 对应调用格式示例:contents.channel_post.photo[targetPhotoIndex].file_id
逻辑说明
- 遍历图片数组时,用
Math.max(宽度, 高度)计算每个图片的长边数值,长边越长代表图片分辨率越高 - 全程记录最大的长边数值和对应的数组下标,遍历完成后得到的就是最高清图片的位置
- 你给出的示例数据中,下标为3的图片长边为
Math.max(1400, 1100) = 1400,为所有条目最大值,和你预期的结果一致
可选优化
如果存在多个图片长边数值相同的情况,可以额外比较file_size字段,取文件体积更大的版本,画质通常更好,修改判断条件即可:
if ( currentLongSide > maxLongSide || (currentLongSide === maxLongSide && currentPhoto.file_size > photoList[targetPhotoIndex].file_size) ) { maxLongSide = currentLongSide; targetPhotoIndex = i; }
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

