Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

202
Views
Definir qué opción devuelta por JSON es mayor según la combinación de dos valores de datos

Para poder descargar una imagen publicada en un canal de Telegram, necesito esta ruta:

 var contents = JSON.parse(e.postData.contents); Logger.log(contents.channel_post.photo);

Y la respuesta es:

 [{ "file_id":"AAAAA", "file_size":11111, "width":253, "height":320 },{ "file_id":"BBBBB", "file_size":22222, "width":632, "height":800 },{ "file_id":"CCCCC", "file_size":44444, "width":1400, "height":1100 },{ "file_id":"DDDDD", "file_size":33333, "width":980, "height":750 }]

El usuario @Newbie me dijo que usara Math.max(width, height) para poder definir cuál de los contenedores tiene la imagen de mayor calidad para poder definir en esta llamada qué file_id debo usar para descargar:

 contents.channel_post.photo[CONTAINER NUMBER].file_id

En este caso el contenedor sería el número 3 . Pero no pude trabajar con este Math.max , necesito ayuda para entender cómo debería ser mi código para hacer este trabajo.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Para recuperar una URL de imagen de un objeto de Message de Telegram Bot Api , deberá:

  • Recuperar un objeto de Message (desde cualquiera de las diversas API)
  • extraer campo de photo de tipo PhotoSize[] documentado aquí
  • cuando elige un PhotoSize (en su caso, el más grande) tiene file_id
  • necesita pasar file_id a getFile() documentado aquí
  • devolverá un objeto de File documentado aquí
  • que luego se pueden ensamblar en una URL como https://api.telegram.org/file/bot<token>/<file_path>
about 4 years ago · Juan Pablo Isaza Report

0

¿La calidad de la imagen no está ya determinada por la propiedad file_size ? Aparece a medida que aumenta la resolución ( width * height ), también lo hace el tamaño del file_size y, por lo tanto, también la calidad. Para esto, verifique mi primera solución anterior.

Si, por el contrario, desea encontrar la imagen de la más alta calidad basada en una proporción que compara width * height y file_size para encontrar el file_size promedio en bytes por píxel (no recomendado), consulte mi segunda solución a continuación:

Encontrar la imagen más grande

Esta solución ordena la matriz de datos de imagen devuelta comparando su resolución ( width * height ) y luego toma la primera imagen (la más grande) de la matriz recién ordenada.

 const contents = {}; contents.channel_post = {}; contents.channel_post.photo = [ { file_id: "AAAAA", file_size: 11111, width: 253, height: 320 }, { file_id: "BBBBB", file_size: 22222, width: 632, height: 800 }, { file_id: "CCCCC", file_size: 44444, width: 1400, height: 1100 }, { file_id: "DDDDD", file_size: 33333, width: 980, height: 750 } ]; const largestImage = contents.channel_post.photo.sort((a, b) => (b.width * b.height) - (a.width * a.height))[0]; console.log(`The largest image's file_id is ${largestImage.file_id}, which contains ${largestImage.width * largestImage.height} pixels (${largestImage.width}×${largestImage.height})`);

Encontrar la imagen de mayor calidad (por píxel)

Si está tratando específicamente de determinar la "calidad" real de la imagen independientemente de la resolución, lo más cercano que podría obtener con los datos proporcionados sería dividir el tamaño de file_size por el área total de píxeles para determinar el tamaño de file_size promedio en bytes por píxel.

Sin embargo, según esta lógica, la imagen de mayor calidad en realidad sería "AAAAA" , que dudo que sea lo que está buscando, por lo que probablemente debería usar la primera solución que proporcioné, que devuelve la imagen más grande.

Vale la pena señalar que debido a que los algoritmos de compresión de imágenes son bastante avanzados en estos días, usar una fórmula como esta para determinar la calidad por píxel es poco confiable, por lo que recomiendo usar la primera solución.

 const contents = {}; contents.channel_post = {}; contents.channel_post.photo = [ { file_id: "AAAAA", file_size: 11111, width: 253, height: 320 }, { file_id: "BBBBB", file_size: 22222, width: 632, height: 800 }, { file_id: "CCCCC", file_size: 44444, width: 1400, height: 1100 }, { file_id: "DDDDD", file_size: 33333, width: 980, height: 750 } ]; const calcImageQuality = ({ file_size, width, height }) => file_size / (width * height); const highestQualityImage = contents.channel_post.photo.sort((a, b) => calcImageQuality(b) - calcImageQuality(a))[0]; console.log(`The highest quality image's file_id is ${highestQualityImage.file_id}, which contains ${calcImageQuality(highestQualityImage)} bytes per pixel on average`);

about 4 years ago · Juan Pablo Isaza Report

0

Puedes encontrar una imagen de la más alta calidad como esta:

 Math.max.apply(Math, array.map(function(o) { return o.width * o.height; }))
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!