当前位置: 首页 > 面试题库 >

计算图像尺寸比率以调整大小

楚和悌
2023-03-14
问题内容

我有一个固定的宽度和高度来调整图像大小。但是,我对此有一个问题,因为图像可以具有任何类型的尺寸比(可以是 垂直水平
)。在这种情况下,固定的宽度和高度会引起问题。我想以更智能的方式计算 宽度和高度

例如,假设我定义了 width 1024px和height 768px 。我想调整垂直图像的尺寸 (高度1100px和宽度200px)
。因此,在我的情况下,它将调整为固定 大小(1024x768) ,因此宽度将从 100px增加到768px
,并且非常难看。同样,如果图像的高度小于 768px ,则通过强制将高度增加到 768px

因此,我想根据原始图像尺寸比率来计算新图像尺寸。可以说,如果上面的示例图片应调整为最大高度 768px ,那么宽度呢?它已经小于我的“最大宽度”(
200px) ,因此宽度应该保持不变吗?还是应该进一步减少?

同样,如果图片 的高度为200px,宽度为1100px 。所以宽度应该 减小到1024px ,但是高度呢?

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

我对此表示感谢。


问题答案:

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

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宽度和高度(目标尺寸的平方)只是一个数字。我确定您可以修改它以使用非正方形目标。它还应该给您启发,您可以使用其他调整大小的算法。



 类似资料:
  • 问题内容: 我正在尝试使用自身百分比来调整img的大小。例如,我只想通过将图像尺寸调整为50%将图像缩小一半。但是应用会将图像调整为容器元素(例如,父元素)的50%。 问题是,我可以在不使用javascript或服务器端的情况下按一定比例调整图像大小吗?(我没有图像尺寸的直接信息) 我很确定您不能这样做,但是我只想看看是否有仅CSS的智能解决方案。谢谢! 问题答案: 我有两种方法给你。 方法1.

  • 问题内容: 我编写了一个应用程序,该应用程序基于固定像素位置自定义绘制paint()中的所有内容。然后我禁用了调整框架的大小,使其始终可见。 但是,现在我希望能够调整它的大小,但是我不想更改我的绘图代码。我希望我可以在所有绘制代码​​之后抓取Graphics g对象的300x300正方形并将其大小调整为JFrame当前大小,但是我不知道自己在做什么。 这里是示例代码。在此,我希望将100x100正

  • 问题内容: 目前,我正在使用: 尽管此方法可行,但最终得到的图像大小不同(有些是纵向的,有些是横向的),但是我希望所有图像都具有精确的尺寸。也许是明智的选择? 更新: 我不介意裁剪图像的一小部分。当我说明智的耕作时,我的意思是这样的算法: 问题答案: 这是我对图像进行填充拟合的观点: 它首先使用缩略图操作将图像降低到原始范围内并保留宽高比。然后将其裁剪掉以实际填充边界的大小(因为除非原始图像为正方

  • 问题内容: 我在这里使用Go调整大小包:https://github.com/nfnt/resize 我正在从S3中提取图像,如下所示: // this gives me data []byte 之后,我需要调整图像大小: // problem is that the original_image has to be of type image.Image 将图像上传到我的S3存储桶 // pro

  • 问题内容: 我在不知道相应图像的宽度/高度的情况下将标签放入文档中: 我想使用CSS将图像缩放到其“本机”大小(基础图像的大小)的一半。我不知道该怎么做。 使用将相对于包含块而不是图像的大小。 我无法调整为特定的像素宽度,因为我不知道图像的尺寸。 由于我只需要支持WebKit,因此我尝试使用转换: 这样可以很好地调整图像,但不会调整图像元素本身的大小。 @Radagaisus建议使用Javascr

  • 问题内容: 我正在尝试从目录加载图像并将其作为图标放置在中。但是,当图像尺寸很大时,就不能完全放入标签中。我尝试调整图像的大小以适合标签,但无法正常工作。我可以知道我要去哪里了吗? 问题答案: BufferedImage img = ImageIO.read(…); Image scaled = img.getScaledInstance(500, 500, Image.SCALE_SMOOTH)