Хорошо, поэтому я написал программу, которая загружает случайные изображения из онлайн-источника, а затем загружает их одно за другим на мой рабочий стол Gnome в Arch Linux.
Теперь я хочу проверить их соотношение сторон и показывать только те изображения, которые соответствуют соотношению сторон моего экрана.
У меня есть следующие функции для определения соотношения сторон:
def highest_common_factor(width,height):
"""Support function to calculate the aspect ratio of a (width:height) input.
Stolen fron online, sometimes also reffered to as the GCD value"""
if(height==0):
return width
else:
return highest_common_factor(height,width%height)
def get_current_resolution():
"""Get current screenresolution"""
screen_resolutions = subprocess.Popen(["xrandr"], stdout=subprocess.PIPE)
get_current_resolution = subprocess.Popen(["grep", '*'], stdin=screen_resolutions.stdout, stdout=subprocess.PIPE)
current_resolution = get_current_resolution.communicate()[0].decode().split()[0]
current_width = int(current_resolution.split("x")[0])
current_height = int(current_resolution.split("x")[1])
return current_width, current_height
def get_aspect_ratio(resolution):
"""Determine current aspect ratio"""
width = resolution[0]
height = resolution[1]
gcd = highest_common_factor(width,height)
aspect_width = width/gcd
aspect_height = height/gcd
return round(aspect_width), round(aspect_height)
Проблема заключается в следующем
Эти функции отлично работают, если изображение имеетидеальные размеры, например 1200: 900 , и я добавляю их в функцию get_aspect_ratio()
, я получаю идеальный результат 4: 3 . Однако, если изображение менее идеальное и имеет разрешение 1200: 901 , я также получу соотношение сторон 1200: 901 .
Математически говоря, это правильно, но человек легко увидит, что на самом деле это 4: 3.
Я думал о том, как решить эту проблему, но до сих пор не нашел работающего решения. Любые идеи или идеи приветствуются!