2011-08-05 41 views
0

我正在嘗試生成用戶上傳圖片的縮略圖。通過使縮略圖類生成原始圖像的寬度和高度的50%的縮略圖,我獲得了基本的功能。不過,我想擴展它的功能,並在縮小50%後在兩側實施大於400px的縮略圖。PHP縮略圖生成

這是我到目前爲止有:

$x = $image_info[0]; // width of original image 
$y = $image_info[1]; // height of original image 
$x_t = $x/2; // width of 50% thumbnail 
$y_t = $y/2; // height of 50% thumbnail 
$biggest = ($x_t > $y_t) ? $x_t : $y_t; // determine the biggest side of the thumbnail 

if($biggest > 400) 
{ 
    // Enforce a 400px limit here 

    /// somehow :(
} 

有了這個硬限制,我希望讓無副作用超過400像素的原始圖像按比例縮小,我想對方被向下縮放相對的,所以圖像看起來不會扭曲。

數學和我一樣糟糕,我無法計算出我的縮略圖類應調整圖像大小的圖像尺寸。

任何想法?

回答

2

你不得不來計算的比例因子:

$factor = $biggest/400; // if 503, then factor = 1.2575; 

$new_x = $x/$factor; 
$new_y = $y/$factor; 

,並使用這些兩個新尺寸的縮放。這會減少任何一邊是最大的$ 400,而其他尺寸按比例縮小的東西低於400

+0

謝謝,但這似乎不起作用。當我上傳尺寸爲2048/1216的圖像時,縮略圖顯示爲:800x475 – Josh

+0

沒關係,修復它。必須這樣做:'$ factor = $最大/ 200;'。謝謝! :) – Josh

0

您必須檢查每個長度,不能同時在一次:

if ($x > 400) { 
    $x_t = 400; 
    $y_t = $y * (400/$x); 
} 
if ($y > 400) { 
    ... 

如果例如,$ x是600,卡路里將變爲$ y_t = $ y *(400/600),從而將$ y減少到其原始值的2/3。

併爲$ y端添加相同的條件。此外,如果雙方都不允許大於400,您可能需要同時應用計算。