2012-10-11 433 views
-2

我需要手動查找新圖像的DPI。PHP調整圖像大小保持高寬比

$input_width = 361; 
$input_height = 413; 

$input_dpi_x = 72; 
$input_dpi_y = 72; 

$output_width = 800; 
$output_height = $input_height * $output_width/$input_width; 

$output_dpi_x = ceil(($input_dpi_x/$input_width) * $output_width); 
$output_dpi_y = ceil(($input_dpi_y/$input_height) * $output_y_res); 

echo "Outpud_dpi_x = " . $output_dpi_x; 
//Outpud_dpi_x = 160 

爲什麼當我調整圖像我得到802而不是800?

,我必須使用DPI不要問爲什麼

+0

我會在分割前進行乘法運算以避免精度損失,但是對於您所說的數字,這是一個非常大的舍入誤差 – Basic

+0

您能否準確告訴我您的意思是我不是匹配人。 –

+0

您的標題要求保持圖像的寬高比,但您的問題是關於計算DPI。有沒有不同的方式來解決問題,以便我們提供解決方案? – jheddings

回答

0

答案是所有的數學......我們只專注於寬度爲簡單起見。

將圖層拉回一點,從縮放操作開始(重新排序以幫助降低精度)。在這裏,我正在計算輸出DPI值並通過求解$output_width的原始公式來驗證結果。

$output_dpi_x = $output_width * $input_dpi_x/$input_width; // 159.5567867... 
$output_width = $output_dpi_x * $input_width/$input_dpi_x; // 800 

你可以看到這個DPI的非校正值,我們回到800爲寬度值。當我們取整到下一個數字時(使用ceil運算符),它會改變結果。通過退繞的數學,我們可以看到,爲什麼你在輸出端了802px:

$output_dpi_x = ceil($output_dpi_x); // 160 
$output_width = $output_dpi_x * $input_width/$input_dpi_x; // 802.22222222... 

當然,圖像不能包含部分像素,讓您的調整後的圖像向下取整到802px。

+0

好吧,對於麻煩的人來說,問題在於我在設置大小後將圖像用於trim()函數,實際上我的公式是OK,但是我已經寫得更好了。 Imagick Extension –

相關問題