Соотношение сторон 1: 1 означает, что ширина равна высоте. Итак, вы хотите проверить, превышает ли разница между шириной и высотой 3 пикселя. Проверка минимальных размеров будет отдельной проверкой.
Если вы хотите, чтобы также были коэффициенты, отличные от 1: 1, вам необходимо решить, где должна применяться разница. Например, для 4: 3 разница в высоте в 3 пикселя будет соответствовать разнице в ширине в 4 пикселя. Поэтому, если вы хотите быть снисходительным и разрешить разницу в 3 пикселя на меньшем краю, вы должны написать что-то вроде
abs($img->width()*3/4 - $img->height()) <= 3
тогда как, если вы хотите быть строгим и иметь порог 3px на большем краю, вместо этого вы должны написать
abs($img->width() - $img->height()*4/3) <= 3
Выполнение умножения перед делением (т. Е. (height*4)/3
вместо height*(4/3)
должно избежать некоторых неожиданностей, которыми может навязать арифметика с плавающей запятой, и сделать случай равенства немного более надежным. Если вы решите обработать соотношение сторон как одно число, помните, что, например, 4/3 не имеет точного представления в виде двоичного числа с плавающей запятой, так что ожидайте ошибки округления. Рассмотрите возможность изменения вашего порога на 3.5
или 3.1
или что-то еще, чтобы математически точная разница в 3 пикселя не сработает из-за округления.