圖片背景管理
之前我們學的創建畫布都是從一個空白開始,然後給他填充顏色、繪製點、文字之類的。現在我們可以直接從現有的圖片載入作為背景。常用的有幾個函數:
imagecreatefrompng()、imagecreatefromjpeg()、imagecreatefromgif()。他們表示載入對應的圖片格式。
另外我們再學一個函數,getimagesize(),傳回一個有四個單元的陣列。索引 0 包含影像寬度的像素值,索引 1 包含影像高度的像素值。索引2 是圖像類型的標記:1 = GIF,2 = JPG,3 = PNG,…
<?php /** * 向不同的格式的图片中间画一个字符 */ function image($imgfile, $string) { list($width, $height, $type) = getimagesize($imgfile); $types = ['1' => 'git', '2' => 'jpeg', '3' => 'png']; $createFunc = 'imagecreatefrom' . $types[$type]; $im = $createFunc($imgfile); $textColor = imagecolorallocate($im, 255, 0, 0); $x = ($width - imagefontwidth(5) * strlen($string)) / 2; $y = ($height - imagefontheight(5)) / 2; imagestring($im, 5, $x, $y, $string, $textColor); header("Content-type:image/".$types[$type]); $output = 'image'.$types[$type]; $output($im); imagedestroy($im); } //image('timg.jpg', 'jpg'); image('1.png', 'png');
圖片縮放與裁剪
下面介紹一個函數,功能非常強大,它能完成圖片的縮放與裁切功能。
此函數原型為:
bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
imagecopyresampled() 將一幅影像中的一塊正方形區域拷貝到另一個影像中,平滑地插入像素值,因此,尤其是,減小了影像的大小而仍然保持了極大的清晰度。
參數
dst_image 目標圖象連結資源。
src_image 來源圖象連接資源。
dst_x 目標 X 座標點。
dst_y 目標 Y 座標點。
src_x 來源的 X 座標點。
src_y 來源的 Y 座標點。
dst_w 目標寬度。
dst_h 目標高度。
src_w 來源圖象的寬度。
src_h 來源圖象的高度。
圖片縮圖
#/** * 图片等比例缩放 * @param string img 原图路径 * @param int width 新图宽度 * @param int height 新图高度 */ function thumb($img, $width = 0, $height = 0) { // 获取图片信息 list($srcW, $srcH, $srcType) = getimagesize($img); $types = [1 => 'gif', 2 => 'jpeg', 3 => 'png']; $type = $types[$srcType]; // 原图资源句柄 $create = 'imagecreatefrom' . $type; $srcIm = $create($img); $ratioOrig = $srcW / $srcH; if ($width / $height > $ratioOrig) { $width = $height * $ratioOrig; } else { $height = $width / $ratioOrig; } // 新图资源 $im = imagecreatetruecolor($width, $height); imagecopyresampled($im, $srcIm, 0, 0, 0, 0, $width, $height, $srcW, $srcH); $output = 'image' . $type; header("content-type:image/$type"); $output($im); imagedestroy($im); imagedestroy($srcIm); } //thumb('timg.jpg', 200, 150); thumb('timg.jpg', 300, 10000); // 如想按某一边等比例缩放,只要把另一边值设为无限大即可
圖片裁切
/** * @param string $img 裁剪图路径 * @param int $x 裁剪点x坐标 * @param int $y 裁剪点y坐标 * @param int $width 图片裁剪的宽度 * @param int $height 图片裁剪的高度 */ function crop ($img, $x, $y, $width, $height) { // 获取图片信息 $im = imagecreatetruecolor($width, $height); $srcType = getimagesize($img)[2]; $types = [1 => 'gif', 2 => 'jpeg', 3=> 'png']; $type = $types[$srcType]; // 原图资源句柄 $create = 'imagecreatefrom' . $type; $srcIm = $create($img); // 裁剪图片 imagecopyresampled($im, $srcIm, 0, 0, $x, $y, $width, $height, $width, $height); // 输出图片 $output = 'image'.$type; header("content-type:image/$type"); $output($im); imagedestroy($im); imagedestroy($srcIm); }
圖片水印
使用imagecopyresampled可以完成圖片浮水印的功能,但這裡我們學習另一個函數imagecopy。
bool imagecopy( resource $dst_im, resource $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h )
將 src_im 圖像中座標從 src_x,src_y 開始,寬度為 src_w,高度為 src_h 的一部分拷貝到 dst_im 圖像中座標為 dst_x 和 dst_y 的位置上。
<?php // 图片水印 $dst = imagecreatefromjpeg('timg.jpg'); $src = imagecreatefromjpeg('php.jpg'); list($srcW, $srcH) = getimagesize('php.jpg'); imagecopy($dst, $src, 0, 0, 0, 0, $srcW, $srcH); header("content-type:image/jpeg"); imagejpeg($dst); imagedestroy($dst); imagedestroy($src);
以上是PHP圖片處理(下)的詳細內容。更多資訊請關注PHP中文網其他相關文章!