PHP GD 是一套用于圖形處理的庫,提供了很多操作圖片的功能。其中,最基本的功能之一就是圖像形變。通過 PHP GD 的形變功能,我們可以在圖片中實現(xiàn)各種各樣的形狀變化,比如將一張正方形變成一個菱形,或者將一張圖片中的特定區(qū)域剪裁成天使的翅膀等等。以下是一些關于 PHP GD 形變的例子。
首先,讓我們嘗試將一張正方形變成一個菱形。
// 創(chuàng)建一個畫布 $image = imagecreate(200, 200); // 為畫布添加顏色 $bgColor = imagecolorallocate($image, 0, 0, 0); // 繪制一個矩形(即正方形) $rectColor = imagecolorallocate($image, 255, 255, 255); imagefilledrectangle($image, 50, 50, 150, 150, $rectColor); // 形變圖片 imageaffine($image, [1, 0.5, 0, 0.5, 1, 0], [50, 50, 150, 50, 150, 150]); // 輸出圖片 header("Content-type: image/png"); imagepng($image); imagedestroy($image);以上代碼中,我們首先創(chuàng)建了一個大小為 200x200 像素的畫布,并為畫布添加了黑色背景。接著,我們使用 imagefilledrectangle() 函數(shù)繪制了一個白色矩形,這個矩形就是我們將要進行形變的正方形。最后,我們使用 imageaffine() 函數(shù)進行形變操作,將正方形變成菱形。 在 imageaffine() 函數(shù)中,第一個參數(shù)指定了待形變的圖片資源,第二個參數(shù)是一個數(shù)組,指定了形變矩陣。這個矩陣是一個 2x3 的矩陣,其中前兩個元素是 x 和 y 軸的縮放因子,接下來兩個元素是 x 和 y 軸的旋轉角度,最后兩個元素是 x 和 y 軸的平移量。在本例中,我們將在 x 軸和 y 軸上分別縮放 1 和 0.5 倍,不進行旋轉,將 x 軸平移 0 個像素,y 軸平移 50 個像素。 接下來,我們嘗試將一副圖片的一個框架變形成一個梯形的形狀。
// 加載圖片資源 $image = imagecreatefrompng('image.png'); // 定義待形變的矩形 $src = [0, 0, 320, 120]; // 定義目標矩形 $dst = [40, 20, 240, 100]; // 形變圖片 imageaffine($image, [1, 0, 0, -0.3, 1, 0], $src, $dst); // 輸出圖片 header("Content-type: image/png"); imagepng($image); imagedestroy($image);此處,我們首先使用 imagecreatefrompng() 函數(shù)加載了一張圖片。接著,我們定義了一個待形變的矩形(即原先圖片中的框架)和一個目標矩形(即形變后的梯形)。同樣地,我們使用 imageaffine() 函數(shù)進行形變操作,指定了形變矩陣和兩個矩形。在本例中,我們將待形變的矩形的底部向下形變 30% 的高度,使其變成了梯形的形狀。 最后,我們來看一個將圖片中的特定區(qū)域剪裁成天使翅膀的例子。
// 加載圖片資源 $image = imagecreatefromjpeg('image.jpg'); // 定義待剪裁的區(qū)域 $src = [450, 150, 650, 350]; // 定義目標矩形 $dst = [400, 100, 300, 300]; // 創(chuàng)建一個空的畫布 $output = imagecreatetruecolor(300, 300); // 剪裁圖片 imagecopyresampled($output, $image, 0, 0, $src[0], $src[1], 300, 300, $src[2]-$src[0], $src[3]-$src[1]); // 輸出圖片 header("Content-type: image/jpeg"); imagejpeg($output); imagedestroy($image); imagedestroy($output);在本例中,我們首先使用 imagecreatefromjpeg() 函數(shù)加載了一張圖片。接著,我們定義了一個區(qū)域(即天使翅膀所在的區(qū)域),和一個目標矩形。我們接著創(chuàng)建了一個大小為 300x300 像素的空畫布,準備將待剪裁的區(qū)域剪裁后放到這個畫布上。最后,我們使用 imagecopyresampled() 函數(shù)進行剪裁操作,并輸出新生成的圖片。 以上是關于 PHP GD 形變的一些例子。通過這些例子的介紹,我們可以看到,PHP GD 的形變功能非常強大,可以幫助我們實現(xiàn)各種各樣的形狀變化。希望這些例子能夠對你有所啟發(fā)。