PHP 检查并调整图像大小以满足 Instagram 要求
PHP check & resize image to meet Instagram requirements
Instagram 图片比例要求为:
- 1:1
- 4:5
- 1.91:1
- 16:9
已读 here and here. The documentation 还说:
(...) Advise the app user to try again with an image that falls withing a
4:5 to 1.91:1 range.
尽管文档没有说明,但我知道发布具有 1:1 比例的照片是可行的。
所以我想检查上传的图片是否符合要求,如果没有调整大小以满足要求(通过缩小尺寸或放大尺寸)。我正在使用 Laravel 和 Image Intervention library。
要检查宽高比,我使用以下代码:
public function isRatioValid($img)
{
$manager = new ImageManager(['driver' => 'imagick']);
$image = $manager->make($img);
$width = $image->width();
$height = $image->height();
for ($i = $height; $i > 1; $i--)
{
if (($width % $i) == 0 && ($height % $i) == 0)
{
$width = $width / $i;
$height = $height / $i;
}
}
$ratio = "{$width}:{$height}";
if (!in_array($ratio, ['1:1', '4:5', '1.91:1', '16:9']))
return false;
return true;
}
问题:
- 此代码严格检查比率值,它并不完全符合 Instagram 文档中所说的“(...) with a 4:5 to 1.91:1 range”。这样可以吗?
- 如果比例无效,我如何使用 Resize 功能来应用符合 Instagram 要求的最佳比例?
已解决.
检查宽高比的代码不正确。要正确检查它,我们需要做的就是将宽度除以高度,看看它是否符合 Instagram 要求的范围。
function isRatioValid(...)
{
$width = 400;
$height = 711;
// 1:1 - squares
if ($width == $height)
return true;
$ratio = round($width / $height, 3);
// Portrait: min 0.8 | max 0.99
// Landscape: min 1.01 | max 1.91
if ($width < $height)
if ($ratio >= 0.8 && $ratio <= 0.99)
return true;
if ($width > $height)
if ($ratio >= 1.01 && $ratio <= 1.91)
return true;
return false;
}
为了调整它的大小,我在宽度(肖像)或高度(风景)中添加了 0.10 直到纵横比在范围内。您应该限制尝试次数,这样它就不会耗尽 CPU / 最大执行时间。
Instagram 图片比例要求为:
- 1:1
- 4:5
- 1.91:1
- 16:9
已读 here and here. The documentation 还说:
(...) Advise the app user to try again with an image that falls withing a 4:5 to 1.91:1 range.
尽管文档没有说明,但我知道发布具有 1:1 比例的照片是可行的。
所以我想检查上传的图片是否符合要求,如果没有调整大小以满足要求(通过缩小尺寸或放大尺寸)。我正在使用 Laravel 和 Image Intervention library。
要检查宽高比,我使用以下代码:
public function isRatioValid($img)
{
$manager = new ImageManager(['driver' => 'imagick']);
$image = $manager->make($img);
$width = $image->width();
$height = $image->height();
for ($i = $height; $i > 1; $i--)
{
if (($width % $i) == 0 && ($height % $i) == 0)
{
$width = $width / $i;
$height = $height / $i;
}
}
$ratio = "{$width}:{$height}";
if (!in_array($ratio, ['1:1', '4:5', '1.91:1', '16:9']))
return false;
return true;
}
问题:
- 此代码严格检查比率值,它并不完全符合 Instagram 文档中所说的“(...) with a 4:5 to 1.91:1 range”。这样可以吗?
- 如果比例无效,我如何使用 Resize 功能来应用符合 Instagram 要求的最佳比例?
已解决.
检查宽高比的代码不正确。要正确检查它,我们需要做的就是将宽度除以高度,看看它是否符合 Instagram 要求的范围。
function isRatioValid(...)
{
$width = 400;
$height = 711;
// 1:1 - squares
if ($width == $height)
return true;
$ratio = round($width / $height, 3);
// Portrait: min 0.8 | max 0.99
// Landscape: min 1.01 | max 1.91
if ($width < $height)
if ($ratio >= 0.8 && $ratio <= 0.99)
return true;
if ($width > $height)
if ($ratio >= 1.01 && $ratio <= 1.91)
return true;
return false;
}
为了调整它的大小,我在宽度(肖像)或高度(风景)中添加了 0.10 直到纵横比在范围内。您应该限制尝试次数,这样它就不会耗尽 CPU / 最大执行时间。