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

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(使用前将#替换为@)

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

  • 优雅地处理没有数据的 amcharts

    我想知道我的 dataProvider 是否为空 amCharts绘制时默认为null 我怎样才能动态地处理它 var chart AmCharts makeChart chartdiv theme none type serial dat
  • PHP 会话不适用于游戏

    我正在尝试模仿一款名为 SKUNK 用骰子玩 的游戏来完成一项作业 我无法让会话正常工作 这是我第一次使用 PHP 我还被告知无需会议即可完成 这是我的代码
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • Yii 使用 ajax 进行分页

    我需要使用ajax启用分页 我的代码 控制器 更新内容ajax function actionIndex dataProvider new CActiveDataProvider News array pagination gt array
  • 生成大随机数 php [重复]

    这个问题在这里已经有答案了 我想使用 PHP 生成一个包含 75 个字符的数字 我到处寻找 但一无所获 除了这个 http dailycoding com tools RandomNumber aspx http dailycoding c
  • 如何通过 BufferedImage 将巨大的图像加载到 Java 中?

    我想将大图像 18000 x 18000 加载到我的应用程序中 如果我使用BufferedImage与类型int rgb 我需要大约 1235mb 的堆内存来加载 这是一个非常大的内存量 最终用户可能拥有更少的内存 1GB 或更少 在我的开
  • FPDI/FPDF:水印和打印多页

    我修改了这个堆栈问题 当用户尝试下载文件时在 pdf 文件上应用水印 https stackoverflow com questions 3983432 applying watermarks on pdf files when users
  • 如何在响应ajax codeigniter后停止执行其他控制器

    我想知道如何在响应输出 json 数据后停止执行函数和涉及的其他控制器 就我这里的情况而言 我只是打电话test 函数于dashboard控制器 In dashboard构造函数将执行MY Login library In MY Login
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • 扩展蓝图类?

    我想覆盖timestamps 函数中发现Blueprint班级 我怎样才能做到这一点 e g public function up Schema create users function Blueprint table table gt
  • opencv - 在图像中绘制轮廓

    我正在尝试在图像周围绘制轮廓 我可以看到找到了轮廓 但无法绘制轮廓 轮廓的颜色似乎是两种 黑色和白色 颜色中的一种 import cv2 import numpy as np import matplotlib pyplot as plt
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • Woocommerce 结账自定义选择字段

    我有以下功能 将选择列表添加到 woo commerce 结账表单中 woocommerce form field airport pickup array type gt select class gt array airport pic
  • PHP HEREDoc (EOF) 语法在 Sublime Text 3 上突出显示与正斜杠的差异

    我不熟悉 Sublime Text 3 如何使用语法突出显示 例如 如果它纯粹依赖于主题 或者它内置于主题运行的标准中 但就我而言 使用 PHP 的 HERE 文档和转发存在一些语法突出显示差异斜线 一旦出现正斜杠 ST3 就会认为以下所有
  • php 错误 fopen(): 文件名不能为空

    发送带有附件代码的电子邮件工作正常 最近我们已将文件传输到另一个托管服务器 idk 发生了什么 它显示以下错误 警告 fopen 第 106 行 home hugerecruitmetnt public html validatecva p
  • Doctrine EntityManager 清除嵌套实体中的方法

    我想用学说批量插入处理 http doctrine orm readthedocs org en latest reference batch processing html为了优化大量实体的插入 问题出在 Clear 方法上 它表示此方法
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • php,统计字符并删除超过140个字符的内容

    我需要一个 PHP 函数来计算短语的字符数 如果短语长度超过 140 个字符 则此函数应删除所有其他字符并在短语末尾添加三个点 例如我们有 message I am what I am and you are what you are et
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 对具有混合类型值的数组进行数字排序

    我有一个像这样的混合数组 fruits array lemon Lemon 20 banana apple 121 40 50 然后申请sort 其功能如下 sort fruits SORT NUMERIC foreach fruits a

随机推荐

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

    我很想知道是否有默认的随机布尔生成器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 水平的 在这种情况下 固定的宽度和高度会导致问题 我想计算宽度和高度以更聪明的方式 例如 假设我已经定义