Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php &引用;作物“;在不丢失比率的情况下,将图像放入容器中,尽可能接近所需大小_Php_Css_Image_Resize - Fatal编程技术网

Php &引用;作物“;在不丢失比率的情况下,将图像放入容器中,尽可能接近所需大小

Php &引用;作物“;在不丢失比率的情况下,将图像放入容器中,尽可能接近所需大小,php,css,image,resize,Php,Css,Image,Resize,这是我的迪莱玛。我有一个315x210px的盒子,还有一堆各种随机大小的图像,有些图像的宽高比像210:1,有些图像的宽高比像2:3,等等 我正在尝试将这些图像嵌入框中,并使它们尽可能接近315x210px,而不会弄乱纵横比。 我也不想使用缩略图,所以我嵌入了原始图像,并使用php计算宽度/高度,使用css隐藏溢出 我的问题是我遇到了麻烦,想不出更有效的方法来解决这个问题。我目前的方法一开始并不十分有效,因此非常感谢您的帮助 第一个if/while在某种程度上可以正常工作,但是我在创建第二个if

这是我的迪莱玛。我有一个315x210px的盒子,还有一堆各种随机大小的图像,有些图像的宽高比像210:1,有些图像的宽高比像2:3,等等

我正在尝试将这些图像嵌入框中,并使它们尽可能接近315x210px,而不会弄乱纵横比。

我也不想使用缩略图,所以我嵌入了原始图像,并使用php计算宽度/高度,使用css隐藏溢出

我的问题是我遇到了麻烦,想不出更有效的方法来解决这个问题。我目前的方法一开始并不十分有效,因此非常感谢您的帮助

第一个if/while在某种程度上可以正常工作,但是我在创建第二个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)