0

115pxより大きくできない動的にロードされた画像があります。私はそれらを外部ソースから取得しているので、それを制御することはできません。

次の方法で画像サイズを取得できます。

$list = getimagesize($imagePath);
$width = $list[0];
$height = $list[1];

しかし、115pxより大きい場合は、サイズを変更する必要があります。これを試しましたが、比率が維持されませんでした:

$height = round(($height * $width) / $width);

誰かがこれを手伝ってくれますか?前もって感謝します。

4

5 に答える 5

1

imagecopyresampledまたはimagecopyresizedの使用を検討する必要があります。

画像を適切に拡大縮小したい場合は、もう少し算術演算を行う必要がありますが、それほど悪くはありません。

画像を拡大縮小するための擬似コードを次に示します。

$max_height = 115;
if ($height > $max_height)
{
    $scale = $max_height / $height;
    $height = intval($height * $scale);
    $width  = intval($width  * $scale);
}

高さ幅を115未満にする必要がある場合の、より一般的な形式は次のとおりです。

$max_size = 115;
if (max($height, $width) > $max_size)
{
    $scale = $max_size / max($height, $width);
    $height = intval($height * $scale);
    $width  = intval($width  * $scale);
}

これにより、画像の最大サイズ(高さまたは幅)が115を超えないことが保証されます。

于 2012-10-02T17:09:39.930 に答える
0

ブラウザの最小要件に応じて、これは実際にHTML出力を対象としているため、これをhtmlで処理して、処理を節約できます。

<img alt='image alt' src='imagesrc' style='max-width:115px; max-height:115px; height:auto; width:auto;' />
于 2012-10-02T18:45:09.897 に答える
0

あなたがそれらが115x115より大きくてはいけないということを意味するならば。あなたが通過しなければならないプロセスは次のようなものです:

115より広い場合は、幅を115pxに設定し、高さ= height / original_width * 115;

これを行う画像アップローダースクリプトからのコードがあります

    list($Width, $Height) = getimagesize($row["img_file"]);

    if(($Width > $Height) && ($Width > 115))
    {
        $Height = ceil(($Height / $Width) * 115) ;
        $Width = 115;
    }
    elseif(($Height > $Width) && ($Height > 115))
    {
        $Width = ceil(($Width / $Height)* 115);
        $Height = 115;
    }
    elseif(($Height > 115) && ($Height == $Width))
    {
        $Height = 115;
        $Width = 115;
    }

正しいサイズになったら、imagecreatefromjpeg / png / gifを使用して画像のサイズを変更し、imagecopyresampledを実行できます。

計算されたサイズを使用してURLから画像のサイズを変更した画像アップロードスクリプトのコードの別のセクション

        if ($extension == "png")
        {
            $image = imagecreatefrompng($URLofImage)or die("Width Of Image: ".$widthofImage." Height Of Image: ".$heightofImage." Height: ".$height." Width: ".$width);
            $image_p = imagecreatetruecolor($widthofImage, $heightofImage)or die("Width Of Image: ".$widthofImage." Height Of Image: ".$heightofImage." Height: ".$height." Width: ".$width);
            imagealphablending($image_p, false);
            $color = imagecolorallocatealpha($image_p, 0, 0, 0, 0);
            imagesavealpha($image_p, true);
            list($width, $height) = getimagesize($URLofImage);

            imagecopyresampled($image_p, $image, 0, 0, 0, 0, $widthofImage, $heightofImage, $width, $height);
            imagepng($image_p, "./images/thumbs/".$name, 9);

            return ("./images/thumbs/".$name);
        }
于 2012-10-02T17:12:27.140 に答える
0

http://www.php.net/manual/en/function.getimagesize.php#97564をご覧ください。

$max_width = 115; 
$max_height = 115;

list($width, $height) = getimagesize($imagePath);
$ratioh = $max_height/$height;
$ratiow = $max_width/$width;
$ratio = min($ratioh, $ratiow);

// New dimensions
$width = intval($ratio * $width);
$height = intval($ratio * $height);
于 2012-10-02T17:12:57.700 に答える
0

あなたの比率は、高さ/幅の比率と言うことができるので、それを変数に入れてください:

$ ratio = $ width / $ height;

100x200ピクセルのような画像がある場合、比率は1/2です。高さが20ピクセルの画像が必要な場合、幅は10ピクセルにする必要があります。

$ newHeight = 20;

$ newWidth = round($ newHeight * $ ratio); //あなたに10を与えます

また、幅を10pxにしたい場合は、これを使用して新しい幅を見つけます。

$ newWidth = 10;

$ newHeight = round($ newWidth / $ ratio);

したがって、少なくとも1つのエッジの長さを指定する必要があります。そうすれば、比率は他のエッジを見つけるのに役立ちます。

于 2012-10-02T17:17:38.947 に答える