2010-07-09 127 views
2

HY填充任何空間,調整圖像尺寸的確切尺寸,保留方面以及在PHP

比方說,我想將圖像轉換成精確的尺寸,例如:400×300。訣竅是,如果圖像由於其縱橫比不適合400x300,則將其放置在黑色邊框的位置。

900x1200圖像將被轉換爲225x300以保留其縱橫比,然後左右黑邊將其設爲400x300。

原始照片:

||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 
||||||||||||||||||||||| 

調整大小後,我想是這個樣子:

_______________________ 
|+++++++++++++++++++++| 
|+++++++++++++++++++++| 
|+++++++++++++++++++++| 
|+++++++||||||||++++++| 
|+++++++||||||||++++++| 
|+++++++++++++++++++++| 
|+++++++++++++++++++++| 
|_____________________| 

的: 「+++++++」 我想會有些色差,和「|||||||」是形象,在中間!

不幸的是,我還沒有任何代碼!

我想是這樣的: http://phpthumb.sourceforge.net/demo/demo/phpThumb.demo.demo.php#x22 感謝

+0

顯示真實照片的例子。我不明白你在問什麼。 – VOX 2010-07-09 01:25:20

+1

你還沒有給出一個問題(除非你想讓人爲你編寫代碼),所以我可以提供的最多建議是使用ImageMagick或GD等圖形庫。 – 2010-07-09 01:31:11

+0

縱橫比計算應該是最不關心的問題,這很簡單,你應該能夠很快計算出來。更大的問題似乎是你不知道從哪裏開始,這是否正確? – deceze 2010-07-09 01:49:47

回答

3

熟悉的gd functions,讓您處理圖像。

您需要使用imagecreatefrom...函數之一讀入圖像。然後,您需要使用例如imagecreatetruecolor創建第二個圖像,其中您選擇了fill。然後,您使用imagecopyresampled將原始圖像複製到新圖像中,從而允許您在該過程中調整其大小。您需要事先使用一些簡單的數學運算來計算新的尺寸,像getimagesize這樣的功能可以幫助您。

另外,玩ImageMagick類,這是gd的替代品,你可能會或可能不會更容易使用。

祝你好運! :)

+0

@robertdd每個函數都有很多示例代碼,['imagecopyresampled']的示例(http://php.net/manual/en/function.imagecopyresampled.php)幾乎就是您要查找的內容。 – deceze 2010-07-09 02:24:22

-2

我編輯的大風扇,並提前調整大小的圖片,是我想,而不是當它被渲染設置寬度和高度尺寸。性能更好,您不必擔心不同的瀏覽器如何處理它。

所以,如果你沒有圖像編輯程序獲取Paint.net。免費,效果很好。

+1

我想這是在PHP中完成! – robertdd 2010-07-09 01:56:16

+0

這與我所說的無關。我在你的電腦上重新調整圖像大小,然後當你渲染網頁時,瀏覽器不必重新調整大小。 – JBrooks 2013-09-28 16:50:16

0

創建一個樣式爲黑色背景的div,尺寸爲400x300。然後在該div內顯示調整大小的圖像。您甚至可以在顯示div之前添加檢查以確保圖像不是所需的方面。

事情是這樣的:

<? 
$height-ratio = $height/300; 
$width-ratio = $width/400; 

if ($height-ratio == $width-ratio) { 
$ratio = $height-ratio; 
} elseif ($height-ratio > $width-ratio) { 
$ratio = $height-ratio; 
echo "<div class='blackbox'>"; 
} else { 
$ratio = $width-ratio; 
echo "<div class='blackbox'>"; 
} 

$newHeight = $height/$ratio; 
$newWidth = $width/$ratio; 
echo "<img src='".$imgSrc."' height='".$newHeight."' width='".$newWidth."' />"; 

if ($height-ratio != $width-ratio) 
echo "</div>"; 
?> 

隨着支持CSS:

.blackbox { 
text-align: center; 
background-color: black; 
height: 300px; 
width: 400px; 
} 
+0

我需要保存照片,不僅要顯示它 – robertdd 2010-07-09 02:11:30

+0

好的想法。無需浪費固體bg上的帶寬 - 特別是如果圖像將以壓縮的JPEG格式輸出,這會使純色看起來很糟糕。如果你需要保存它,那麼我會堅持使用PNG或SVG(SVG不太受支持,但會最有效地渲染背景)。 – 2010-07-09 02:12:07

+0

您可能不會在純色背景上浪費帶寬,但您仍在下載一個潛在的海量圖片,該圖片只能通過瀏覽器縮小至400x300。這可能會浪費比黑色邊框更多的帶寬。 – deceze 2010-07-09 02:15:35