PHP 图片上传限制宽高比,只允许尺寸 >= 600 像素的图片

PHP Image upload limit aspect ratio and allow only images with dimensions >= 600px

我想将所有上传的图片的纵横比限制为 1。这些图片的最小 height/width 也应为 600 像素。我的问题是我的 javascript cropper(slimimagecropper) 有时会生成尺寸为 599x600px 或 598x600px 的图像。为了解决这个问题,我想允许一个 +-3px 的公差。 我检查纵横比如下:

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

但是现在图片越大(比如700x700)容差越大(7px)。

有人知道检查纵横比的更好方法吗?

纵横比 1:1 表示宽度等于高度。所以你想检查宽度和高度之间的差异是否超过 3px。检查最小尺寸将是一个单独的检查。

如果您还想有 1:1 以外的比率,您需要决定差异适用的位置。例如,对于 4:3,3 像素的高度差对应 4 像素的宽度差。所以如果你想宽大点并允许在较小的边缘有 3px 的差异,你可以这样写

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.53.1 或其他任何东西,以便 3px 的数学精确差异不会因四舍五入而失败。