css - CSS 背景大小 :cover 背后的数学原理是什么

标签 css gd

我正在创建一个“图像生成器”,用户可以在其中上传图像并添加文本和/或在图像上绘图。输出的图像是固定大小 (698x450)。

在客户端,当用户上传他们的图片时,它被设置为 698x450 的 div 背景,背景大小为:封面。这使它很好地填充了该区域。

最终的组合图像由 PHP 使用 GD 函数生成。我的问题是,如何让图像在 PHP 中像在 CSS 中一样进行缩放。我希望 PHP 脚本的结果看起来与图像在 CSS 中设置的一样,就像上面那样。 有谁知道使用 background-size:cover 的浏览器如何计算如何适本地缩放图像?我想将其翻译成 PHP。

谢谢

最佳答案

这是封面计算背后的逻辑。

你有四个基本值:

imgWidth // your original img width
imgHeight

containerWidth // your container  width (here 698px)
containerHeight

从这些值得出的两个比率:

imgRatio = (imgHeight / imgWidth)       // original img ratio
containerRatio = (containerHeight / containerWidth)     // container ratio

您想找到两个新值:

finalWidth // the scaled img width
finalHeight

所以:

if (containerRatio > imgRatio) 
{
    finalHeight = containerHeight
    finalWidth = (containerHeight / imgRatio)
} 
else 
{
    finalWidth = containerWidth 
    finalHeight = (containerWidth / imgRatio)
}

...你有一个相当于背景大小的封面。

关于css - CSS 背景大小 :cover 背后的数学原理是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10285134/

相关文章:

javascript - 我如何自动填充输入文本框值使其与名称相同?

css - 更改自动填充值的背景输入字段的颜色

javascript - 仅将更改应用于具有相同方法名称的多个元素中的单击元素

php - 从任何文件类型的 URL 创建图像

PHP GD 库在同一页面上输出图像和文本内容

PHP GD 如何圆形裁剪 3 个方形图像并合并为 1 个图像保持透明度

html - 当 float 列表项的高度较小时,将它们定位在底线上

css - 固定 Div 隐藏滚动条

php - 如何使用 PHP 调整高分辨率图片的大小

php - 我可以使用 php 和 gd 检测动画 gif 吗?