计算图像大小比例以调整大小

2023-11-23

我有一个定义的固定宽度和高度来调整图像大小。但是,我对此有问题,因为图像可以具有任何类型的尺寸比(可以是vertical or the 水平的)。在这种情况下,固定的宽度和高度会导致问题。我想计算宽度和高度以更聪明的方式。

例如,假设我已经定义了宽度 1024 像素,高度 768 像素。我想调整垂直图像的大小(高度 1100 像素,宽度 200 像素)。所以就我而言,它将调整大小为固定尺寸(1024x768),因此宽度将从100 像素至 768 像素,而且会非常难看。同样,如果图像的高度小于768px,它将强制增加高度768px.

因此我想根据原始图像尺寸比例计算新图像尺寸。假设上面的示例图像的大小是否应调整为最大高度768px,但是宽度呢?它已经小于我的“最大宽度”,即200px,那么宽度应该保持不变吗?还是应该进一步减少?

同样,如果图像有高度 200px,宽度 1100px。所以宽度应该是减少到 1024px,但是高度呢?

第三个问题是,假设高度和宽度都大于最大高度和最大宽度,比如说宽度:1100px 高度:4000px。现在,由于宽度和高度都超过了最大宽度和最大高度,但图像是垂直的,因此它将使其水平。那么,在这种情况下,我如何检查是否应该根据最大高度或最大宽度调整图像大小?

我很感谢对此的任何帮助。


这是我个人的图像调整大小代码袋中的代码。首先,您需要的数据:

list($originalWidth, $originalHeight) = getimagesize($imageFile);
$ratio = $originalWidth / $originalHeight;

然后,该算法尽可能地将图像适合目标尺寸,保持原始长宽比,而不将图像拉伸得比原始尺寸更大:

$targetWidth = $targetHeight = min($size, max($originalWidth, $originalHeight));

if ($ratio < 1) {
    $targetWidth = $targetHeight * $ratio;
} else {
    $targetHeight = $targetWidth / $ratio;
}

$srcWidth = $originalWidth;
$srcHeight = $originalHeight;
$srcX = $srcY = 0;

这会裁剪图像以完全填充目标尺寸,而不是拉伸它:

$targetWidth = $targetHeight = min($originalWidth, $originalHeight, $size);

if ($ratio < 1) {
    $srcX = 0;
    $srcY = ($originalHeight / 2) - ($originalWidth / 2);
    $srcWidth = $srcHeight = $originalWidth;
} else {
    $srcY = 0;
    $srcX = ($originalWidth / 2) - ($originalHeight / 2);
    $srcWidth = $srcHeight = $originalHeight;
}

这实际上是调整大小:

$targetImage = imagecreatetruecolor($targetWidth, $targetHeight);
imagecopyresampled($targetImage, $originalImage, 0, 0, $srcX, $srcY, $targetWidth, $targetHeight, $srcWidth, $srcHeight);

在这种情况下$size宽度和高度只是一个数字(方形目标尺寸)。我确信您可以修改它以使用非方形目标。它还应该为您提供有关可以使用哪些其他调整大小算法的灵感。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算图像大小比例以调整大小 的相关文章

  • 如何将变量插入 PHP 数组?

    我在网上查了一些答案 但都不是很准确 我希望能够做到这一点 id result id info array id Example echo info 0 这有可能吗 您需要的是 不推荐 info array id Example varia
  • 我可以让 swagger-php 在查询字符串上使用数组吗?

    我使用 Swagger php 当我定义查询字符串上的参数时 它可以是一个数组 但据我所知 它不支持这种查询字符串 https api domain tld v1 objects q 1 q 5 q 12 我相信这会被设定in the co
  • Symfony2:为什么请求传递到受 Symfony2 中 AppCache 影响的 Kernel.Terminate EventListener

    在我的 Symfony2 2 应用程序中 我使用 onKernelTerminate EventListener 以便我可以在渲染响应后进行一些 繁重 处理 以便用户收到更快的响应时间 在我的控制器中 我在请求上设置了一个属性 以便当事件侦
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 如何关闭未关闭的 HTML 标签?

    每当我们从数据库或类似来源获取一些经过编辑的用户输入内容时 我们可能会检索仅包含开始标记但不包含结束标记的部分 这可能会妨碍网站当前的布局 有客户端或服务器端的方法来解决这个问题吗 找到了一个很好的答案 使用 PHP 5 并使用 DOMDo
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 沿着预定路径移动图像?

    是否可以通过按下 iphone SDK 中的按钮来将图像设置为沿着预定路径运动 我不是在寻找任何奇特的东西 我正在研究一个简单的概念 但这会节省大量动画工作 是的 您可以通过创建一个路径来为任何 CALayer 制作动画CAKeyframe
  • 未传递“client_reference_id”参数

    我使用 Stripe Checkout Stripe 版本 2016 07 06 我想通过参数 client reference id 恢复个性化数据 但在 JSON 中 当我有金额或电子邮件时 我找不到它 我是在测试环境中 你能帮我吗 先
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 检查 PHP 中的字符串长度

    我有一个长度为 141 个字符的字符串 使用下面的代码我有一个if如果字符串大于或小于 140 则语句返回一条消息 libxml use internal errors TRUE dom new DOMDocument dom gt loa
  • Facebook 应用程序无法获取会话

    我正在 Heroku 上为 Facebook 开发一个非常基本的 PHP 应用程序 它显示非常基本的用户信息 如姓名 个人资料图片 但该应用程序在 getToken 方法中停止 我在登录我的个人资料后尝试了该应用程序 但仍然出现相同的消息
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • Facebook PHP SDK - 如何获取访问令牌?

    我正在尝试从我的应用程序在用户的 Facebook 墙上发帖 用户授予应用程序在他的墙上发布的权限 并且我在数据库中有用户ID 我需要自动发送帖子 而无需用户再次登录 我的代码是 try require once dirname FILE
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • 如何将 Smarty 3 包含到 Laravel 4 中?

    我是 Laravel 的新手 所以仍在习惯这些概念 但是我有大约 10 年的使用 Smarty 的经验 所以我希望利用这一点 除了事实上 Blade 似乎缺乏太多我发现有用且在 Smarty 中开箱即用的功能 但无论如何除了这个问题的要点之
  • 如何删除文件

    我们有一个脚本 scripts ourscript php和一个文件 media movie1 flv 当我们运行时 我们如何删除这个文件ourscript php Using unlink http php net manual en f
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • 如何使用 php 在 sql 查询中转义引号?

    我有一个疑问 sql SELECT CustomerID FROM tblCustomer WHERE EmailAddress addslashes POST username AND Password addslashes POST p
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • ZF3/2 - 如何捕获 EVENT_DISPATCH 侦听器中引发的异常?

    有什么方法可以在 EVENT DISPATCH 监听器中抛出异常吗 class Module public function onBootstrap EventInterface event application event gt get

随机推荐

  • 适当的布尔随机生成器(伯努利分布)

    我很想知道是否有默认的随机布尔生成器randomC 11 库 我一直在使用 int 生成器返回0 or 1然后转换为 bool 但我正在尝试优化我的代码 并认为我可以通过从一开始就使用 bool 生成器 如果存在 来节省成本 See std
  • 砍掉每个变量名称的第一个字母[重复]

    这个问题在这里已经有答案了 我有一些数据看起来像这样 country agdp apop 1 US 100 100 2 Australia 50 50 变量名称是agdp and apop 但我希望他们是gdp and pop 我的真实数据
  • Bootstrap-vue b-table 标头中带有过滤器

    我有一个使用 bootstrap vue 生成的表 显示系统搜索的结果 结果表向用户显示记录 用户可以对它们进行排序和过滤 如何在表格标题下方添加搜索字段 th 使用 bootstrap vue 生成 th
  • 为什么我无法使用 Xamarin 在可移植类库中引用 System.Net.Sockets?

    我正在尝试在可移植类库中使用 System Net Sockets API 以便我的项目可以重用套接字连接代码 但我无法在代码中引用该名称空间 据我了解 PCL 限制您只能使用所有目标平台上可用的程序集 但我的目标是 ios Android
  • C# 与 SharpZipLib - SharpZipLib 与 Winzip 和 XP 的兼容性吗?

    我正在使用SharpZipLib自动压缩某些文件的库 问题是生成的 zip 文件不适用于 Winzip 版本 8 1 或 XP 的压缩文件夹 它确实可以与 7zip 一起使用 Winzip 给出一个错误该文件不是标准 Zip 2 0 格式
  • TabIndex 无法正常工作

    I have a windows form application On the form there are three groupboxs Each groupbox contains some controls Please see
  • 如何在模板绑定中从 Angular 4 访问 getter/setter 访问器?

    假设我有以下 getter setter 方法 get next console log this people this index this index return this people this index set next i
  • 使用 jQuery .filter() 选择 div 中的特定文本

    HTML p class greeting hello my name is kevin what s yours p jQuery p greeting filter function return this text my name i
  • JPA 不生成“删除时设置为空”FK 限制

    我有两个相关的 JPA 注释类 警报和状态 一个警报可以有一个状态 我需要的是能够删除一个状态并将空值 传播 到已删除的该状态中的警报 也就是说 我需要将外键定义为 删除时设置为空 Entity public class Alarm Id
  • PHP 速度与其他语言的比较

    我经常听说 PHP 与其他语言相比速度很慢 速度差异是否足够明显以至于我应该切换到另一种语言 如果是这样 您会推荐什么其他语言 或者有什么好的优化可以加快 PHP 的速度 这个问题经常出现 答案是 是的 它比 C Java C C 等慢 不
  • 具有 memory_order_relaxed 的存储是否有可能永远不会到达其他线程?

    假设我有一个线程A写入一个atomic int x 0 using x store 1 std memory order relaxed 如果没有任何其他同步方法 其他线程需要多长时间才能看到这一点 使用x load std memory
  • costura.fody 用于引用另一个 dll 的 dll

    我有一个我写的小exe 它使用LibGit2Sharp我正在尝试使用Costura Fody嵌入所有内容 这样我只有一个可执行文件可以分发 实际上 还有两个配置文件 但这没关系 问题似乎是这样的LibGet2Sharp dll有相当坚定的参
  • C# 如何初始化WebService

    是否有可能初始化 WebService 我正在寻找一种仅在第一次调用 WebService 期间运行的方法 Net 中有类似的东西吗 如果您在给定客户端第一次连接到 Web 服务时需要 初始化 Have an Initialise返回令牌
  • 路径助手生成带有点而不是斜线的路径

    在我的 paths rb 中 我有以下内容 resources message threads 当我打电话时 message threads path 1 I get message threads 1 为什么是这样 我的其他资源运行良好
  • 给定成对距离且簇数未知的聚类?

    我有一组对象 obj1 obj2 obj3 objn 我已经计算了所有可能对的成对距离 距离存储在n n matrix M with Mij之间的距离obji and objj 那么自然就可以看到M是一个对称矩阵 现在我希望对这些对象执行无
  • 从指令内更改属性

    使用 AngularJS 我有一个指令 我想要有两种方式的数据绑定 该指令将有一个名为 activate 的属性 最初 activate 的值为 1 该指令的链接函数将检查 activate 是否等于 1 如果是这样 它会将 activat
  • 强制执行标记的 AWS IAM 策略

    有没有办法在创建 EC2 实例时强制执行标记 如果没有某些标签 用户无法启动实例 我可以使用该标签根据标签来控制特定实例吗 我在为客户工作时也遇到过类似的用例 答案是是的你可以 您可以强制用户通过 IAM 策略应用特定标签 例如 您可以将策
  • 在覆盖 Equals 的 null 检查之前转换为对象[重复]

    这个问题在这里已经有答案了 只需阅读有关覆盖相等运算符的 msdn 文章here 下面的片段让我困惑 If parameter cannot be cast to Point return false TwoDPoint p obj as
  • Repeater、ListView、DataList、DataGrid、GridView...选择哪一个?

    有这么多不同的控件可供选择 确定使用哪个控件在 ASP NET 中显示数据的最佳实践是什么 这实际上是关于你想要实现的目标 Gridview 设计有限 工作方式类似于 html 表格 更多内置功能 如编辑 更新 页面 排序 很多开销 Dat
  • 计算图像大小比例以调整大小

    我有一个定义的固定宽度和高度来调整图像大小 但是 我对此有问题 因为图像可以具有任何类型的尺寸比 可以是vertical or the 水平的 在这种情况下 固定的宽度和高度会导致问题 我想计算宽度和高度以更聪明的方式 例如 假设我已经定义