Php &引用;作物“;在不丢失比率的情况下,将图像放入容器中,尽可能接近所需大小
这是我的迪莱玛。我有一个315x210px的盒子,还有一堆各种随机大小的图像,有些图像的宽高比像210:1,有些图像的宽高比像2:3,等等 我正在尝试将这些图像嵌入框中,并使它们尽可能接近315x210px,而不会弄乱纵横比。 我也不想使用缩略图,所以我嵌入了原始图像,并使用php计算宽度/高度,使用css隐藏溢出 我的问题是我遇到了麻烦,想不出更有效的方法来解决这个问题。我目前的方法一开始并不十分有效,因此非常感谢您的帮助 第一个if/while在某种程度上可以正常工作,但是我在创建第二个if/while时意识到,我所做的将导致服务器崩溃死亡循环。因此,第二个if从未真正完成,因此我不希望它能工作。它只是为了展示我的理念 我对全新的想法持开放态度,但我所要求的是,无论是什么,都不涉及创作和缩略图。我希望原始图像是嵌入的图像Php &引用;作物“;在不丢失比率的情况下,将图像放入容器中,尽可能接近所需大小,php,css,image,resize,Php,Css,Image,Resize,这是我的迪莱玛。我有一个315x210px的盒子,还有一堆各种随机大小的图像,有些图像的宽高比像210:1,有些图像的宽高比像2:3,等等 我正在尝试将这些图像嵌入框中,并使它们尽可能接近315x210px,而不会弄乱纵横比。 我也不想使用缩略图,所以我嵌入了原始图像,并使用php计算宽度/高度,使用css隐藏溢出 我的问题是我遇到了麻烦,想不出更有效的方法来解决这个问题。我目前的方法一开始并不十分有效,因此非常感谢您的帮助 第一个if/while在某种程度上可以正常工作,但是我在创建第二个if
if($width_orig <= 315 && $height_orig <= 210){
while($newWidth <= 315 || $newHeight <= 210){
$newWidth = round($newWidth*1.2);
$newHeight = round($newHeight*1.2);
}
}
//This one was never intended to work. It's just for example.
else if($width_orig >= 315 && $height_orig >= 210){
while($newWidth >= 315 || $newHeight >= 210){
$newWidth = round($newWidth*1.2);
$newHeight = round($newHeight*1.2);
}
}
else
{
$newWidth = 315;
$newHeight = 210;
}
如果($width\u orig那么,您可以使用除法,而不是在小图像上使其变大
if($width_orig <= 315 && $height_orig <= 210){
$ratio = $width_orig/$height_orig;
if($ratio > 1.5){ //wider than the desired ratio
$multby = 315 / $width_orig;
} else {
$multby = 315 / $height_orig;
}
$newWidth = round($newWidth*$multby)
$newHeight = round($newHeight*$multby)
}
你可以试试
$imageHeight = 500;
$imageWidth = 600;
$maxHeight = 315;
$maxWidth = 210;
$max = ($maxWidth > $maxHeight) ? $maxWidth : $maxHeight;
$ratio = max($imageWidth, $imageHeight) / $max;
$ratio = max($ratio, 1.0);
$newHeight = ceil($maxHeight / $ratio);
$newWidth = ceil($imageWidth / $ratio);
var_dump("Height From: $imageHeight -> $newHeight", "Width From : $imageWidth -> $newWidth " );
输出
string 'Height From: 500 -> 166' (length=18)
string 'Width From: 600 -> 315' (length=20)
我需要图像来填充整个盒子,(图像的大小需要不小于315x210).这在调整大小以适应盒子内部方面做得很好,但某些图像仍有空白。如果你强行调整,图像的形状将丢失…使其变形…我不建议这样做…但如果你想…你可以增加图像的大小,然后裁剪…这也会影响我正在使用的图像CSS来隐藏溢出,这样我可以增加两个维度,使其大于长方体,但同时保持纵横比。正如我在问题中提到的,第一个if/while语句完美地满足了我的需要,如果图像需要增加大小,我只是想不出一种方法,在没有creati的情况下使图像变小我也相信有一种更有效的方法可以做到。你说的有些宽高比像210:1
。如果你不使用这个比例…那么大小是固定的…我的助手使用裁剪…看,你的图像将是
,这将允许你裁剪到准确的大小,而不需要修改丢失比率欢迎您…如果您在实现过程中丢失了…您可以随时在此处发送消息…@user1368667看起来不错,但问题是我正在尝试使图像尽可能接近315x210。我过去曾使用过类似的方法,它的大小通常与我试图达到的大小相差很远。
string 'Height From: 500 -> 166' (length=18)
string 'Width From: 600 -> 315' (length=20)