2012-09-10 272 views
1

我只想知道是否可以獲取不同圖像的尺寸,併爲這些圖片創建固定的縮略圖尺寸測量而不會丟失其精確的高寬比。爲不同尺寸的圖像創建固定的縮略圖尺寸

到目前爲止,我已經使這些:

  • 調整不同的圖像
  • 保持它們的縱橫比
  • NOT供給相同的尺寸(例如: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."' />"; 
} 
?> 
+0

我相信,只有設置寬度將自動設置正確的高度。唯一需要做的是確保圖像的高度永遠不會高於固定寬度,否則你會表或任何你正在使用的,被扭曲。 – dbf

回答

0

短裁剪的,保持高寬比,同時使縮略圖是做類似於你有什麼事情最簡單的方法,但設定一個固定的:

例如,如果你希望所有的tumbs爲100像素寬:

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

與此需要提醒的是,你可能最終得到一些有趣的大小如果圖像有一個有趣的比例 - 在它會很樂意繼續前進,就去做。對代碼中的比例進行某種檢查可能是一個好主意 - 如果它太低或太高,請執行其他操作,否則使用此標準進程。

+0

這將導致相同的寬度,但高度不同。先生,我說得對嗎? – JetPro

+1

@JetPro Yup,缺少裁剪,這是維持寬高比的唯一真正方法。對於大多數圖片來說,它應該可以正常工作 - 如果您想要降低上限/下限來檢查比率,請先:) – Fluffeh

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); 
    } 
} 
0

’ s的兩個常數,thumb_widththumb_height,這是您的縮略圖像的期望的寬度和高度開始。他們可以是平等的,但不必’噸。

如果您的圖像比較高(橫向),我們可以將寬度設置爲所需的縮略圖寬度thumb_width,然後調整高度以保持縱橫比。

new_width = thumb_width 
new_height = thumb_height * old_height/old_width 

請參閱imagecreatetruecolor

然後,您可以將圖像垂直居中在縮略圖的範圍內,產生letterbox效果。見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 

有關創建縮略圖的基礎知識更多信息,請Resizing images in PHP with GD and Imagick