1

正確な縦横比を失うことなく、さまざまな画像のサイズを取得し、これらの画像の固定サムネイル寸法測定値を作成できるかどうかを知りたいだけです。

これまでのところ、私はこれらを作りました:

  • さまざまな画像のサイズを変更する
  • アスペクト比を維持する
  • 同じサイズを提供していない(例: 高さ 100px、幅 100px)

ここに私が取り組んでいるコードがあります:

<?php
require("dbinfo.php");

$allPhotosQuery = mysql_query (" SELECT * FROM `placesImages` ");

while ($allPhotosArray = mysql_fetch_assoc ($allPhotosQuery))
{
    $filename= $allPhotosArray['fileName'];
    $placeId = $allPhotosArray['placeId'];

    $imagePath = "placesImages/" . $placeId . "/" . $filename;
    $imageSize = getimagesize($imagePath);

    $imageWidth = $imageSize[0];
    $imageHeight = $imageSize[1];

    $newSize = ($imageWidth + $imageHeight)/($imageWidth*($imageHeight/45));
    $newHeight = $imageHeight * $newSize;
    $newWidth = $imageWidth * $newSize;

    echo "<img src='".$imagePath."' width='".$newWidth."' height='".$newHeight."' />";
}
?>
4

3 に答える 3

0

切り抜きを除いて、サムネイルを作成する際に縦横比を維持する最も簡単な方法は、あなたが持っているものと似たようなことをすることですが、1 つを固定してください:

たとえば、すべてのタンブを 100px 幅にしたい場合:

$imageWidth = $imageSize[0];
$imageHeight = $imageSize[1];
$ratio=ImageWidth/$imageHeight;
$newHeight=(int)$ratio*100;
$newWidth=100;

これに関する注意点は、画像の比率がおかしい場合、おかしなサイズになってしまう可能性があることです。コード内の比率に何らかのチェックを入れることをお勧めします。比率が低すぎたり高すぎたりする場合は別のことを行い、それ以外の場合はこの標準プロセスを使用します。

于 2012-09-10T23:10:18.127 に答える
0

thumb_width2 つの定数とから始めましょうthumb_height。これらは、サムネイル画像の希望の幅と高さです。それらは等しくてもかまいませんが、そうである必要はありません。

高さよりも幅が広い画像 (横長) がある場合は、幅をサムネイルの目的の幅に設定しthumb_width、高さを調整して縦横比を維持することができます。

new_width = thumb_width
new_height = thumb_height * old_height / old_width

imagecreatetruecolorを参照してください。

次に、画像を移動してサムネイルの範囲内で垂直方向の中央に配置し、レターボックス効果を作成します。imagecopyresampledを参照してください。

new_y = (thumb_height - new_height) / 2

幅よりも高さが高い画像 (ポートレート) の場合、手順は同じですが、計算方法が少し異なります。

new_height = thumb_height
new_width = thumb_width * old_width / old_height

次に、サムネイルの範囲内で水平方向に中央揃えできます。

new_x = (thumb_width - new_width) / 2

サムネイル画像の作成の基本の詳細については、GD と Imagick を使用した PHP での画像のサイズ変更を参照してください。

于 2012-09-11T00:46:15.767 に答える
0

この関数に元の画像の幅と高さ、続いてサムネイル制限の最大制約を入力すると、アスペクト比を維持するためにサムネイルを設定する必要がある x/y の配列が出力されます。(サムネイルより小さいものは拡大されます)

function imageResizeDimensions($source_width,$source_height,$thumb_width,$thumb_height)
{
  $source_ratio = $source_width / $source_height;
  $thumb_ratio = $thumb_width / $thumb_height;
  if($thumb_ratio > $source_ratio)
  {
    return array('x'=>$thumb_height * $source_ratio,'y'=>$thumb_height);
  }
  elseif($thumb_ratio < $source_ratio)
  {
    return array('x'=>$thumb_width,'y'=>$thumb_width/$source_ratio);
  }
  else
  {
    return array('x'=>$thumb_width,'y'=>$thumb_width);
  }
}
于 2012-09-10T23:33:04.863 に答える