簡體   English   中英

為不同尺寸的圖像創建固定的縮略圖尺寸

[英]Create fixed thumbnail dimensions for images with different sizes

我只是想知道是否有可能獲得不同圖像的尺寸,並為這些圖像創建固定的縮略圖尺寸測量而不會丟失其准確的寬高比。

到目前為止,我已經做了這些:

  • 調整不同圖像的大小
  • 保持寬高比
  • 提供相同的尺寸(例如: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."' />";
}
?>

缺少裁剪時,在制作縮略圖時保持寬高比的最簡單方法是執行與您的操作類似的操作,但是將其設置為固定值:

例如,如果您希望所有Tumb的寬度均為100px,請執行以下操作:

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

需要注意的是,如果圖像具有有趣的比例,您最終可能會得到一些有趣的尺寸-因為它將很高興繼續進行。 對代碼中的比率進行某種檢查可能是一個好主意-如果比率太低或太高,請執行其他操作,否則請使用此標准過程。

將此功能提供給您的原始圖像寬度和高度,再加上縮略圖限制的最大限制,它將吐出一個與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);
  }
}

讓我們從兩個常量thumb_widththumb_height ,它們是縮略圖的所需寬度和高度。 它們可以相等,但不一定要相等。

如果您的圖像thumb_width (風景)寬,我們可以將寬度設置為縮略圖的所需寬度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中調整圖像的大小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM