PHP изображения загружают ограничение размера изображения и разрешают только изображения с размерами> = 600px - PullRequest
0 голосов
/ 04 ноября 2018

Я хочу ограничить любые изображения, загруженные с соотношением сторон 1. Эти изображения также должны иметь минимальную высоту / ширину 600 пикселей. Моя проблема в том, что мой javascript cropper(slimimagecropper) иногда создает изображения с размерами 599x600px или 598x600px. Чтобы решить эту проблему, я хотел разрешить допуск + -3px. Я проверяю соотношение сторон следующим образом:

if (abs(1 - ($image->width() / $image->height())) <= 0.009) { //... }

Но теперь, чем больше изображение (например, 700x700), тем больше допуск (7 пикселей).

Кто-нибудь знает лучший способ проверить соотношение сторон?

1 Ответ

0 голосов
/ 04 ноября 2018

Соотношение сторон 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 пикселя не сработает из-за округления.

...