程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 如何用PHP改變圖片的尺寸

如何用PHP改變圖片的尺寸

編輯:關於PHP編程

改變圖片的尺寸是一個很常見的功能需求,下面開始研究下關於PHP改變圖片尺寸的方法。先介紹一個自己寫的函數。

<?php
$imgsrc = "http://www.bkjia.com/images/3.jpg";
$width = 780;
$height = 420;
resizejpg($imgsrc,$imgdst,$width,$height);
function resizejpg($imgsrc,$imgdst,$imgwidth,$imgheight)
{ 
	//$imgsrc jpg格式圖像路徑 $imgdst jpg格式圖像保存文件名 $imgwidth要改變的寬度 $imgheight要改變的高度
	//取得圖片的寬度,高度值
	$arr = getimagesize($imgsrc);                     
	header("Content-type: image/jpg");
	
	$imgWidth = $imgwidth;
	$imgHeight = $imgheight;
	// Create image and define colors
	$imgsrc = imagecreatefromjpeg($imgsrc);
	$image = imagecreatetruecolor($imgWidth, $imgHeight);  //創建一個彩色的底圖
	imagecopyresampled($image, $imgsrc, 0, 0, 0, 0,$imgWidth,$imgHeight,$arr[0], $arr[1]);
	imagepng($image);
	imagedestroy($image);
}
?>

imagecopyresampled

imagecopyresampled -- 重采樣拷貝部分圖像並調整大小。

int imagecopyresampled ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)

imagecopyresampled() 將一幅圖像中的一塊正方形區域拷貝到另一個圖像中,平滑地插入像素值,因此,尤其是,減小了圖像的大小而仍然保持了極大的清晰度。dst_im 和 src_im 分別是目標圖像和源圖像的標識符。如果源和目標的寬度和高度不同,則會進行相應的圖像收縮和拉伸。坐標指的是左上角。本函數可用來在同一幅圖內部拷貝(如果 dst_im 和 src_im 相同的話)區域,但如果區域交迭的話則結果不可預知。

注: 因為調色板圖像限制(255+1 種顏色)有個問題。重采樣或過濾圖像通常需要多於 255 種顏色,計算新的被重采樣的像素及其顏色時采用了一種近似值。對調色板圖像嘗試分配一個新顏色時,如果失敗我們選擇了計算結果最接近(理論上)的顏色。這並不總是視覺上最接近的顏色。這可能會產生怪異的結果,例如空白(或者視覺上是空白)的圖像。要跳過這個問題,請使用真彩色圖像作為目標圖像,例如用 imagecreatetruecolor() 創建的。

注: imagecopyresampled() 需要 GD 2.0.l 或更高版本。

一個簡單的示例:

<?php
// The file
$filename = 'test.jpg';
$percent = 0.5;
// Content type
header('Content-Type: image/jpeg');
// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;
// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// Output
imagejpeg($image_p, null, 100);
?>

示例2:

<?php
// The file
$filename = 'test.jpg';
// Set a maximum height and width
$width = 200;
$height = 200;
// Content type
header('Content-Type: image/jpeg');
// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
   $width = $height*$ratio_orig;
} else {
   $height = $width/$ratio_orig;
}
// Resample
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// Output
imagejpeg($image_p, null, 100);
?>

有兩種改變圖像大小的方法:

  • ImageCopyResized() 函數在所有GD版本中有效,但其縮放圖像的算法比較粗糙。
  • ImageCopyResamples(),其像素插值算法得到的圖像邊緣比較平滑。(但該函數的速度比 ImageCopyResized() 慢)。

兩個函數的參數是一樣的,如下:

imageCopyResampled(dest,src,dy,dx,sx,sy,dw,dh,sw,sh);
imageCopyResized(dest,src,dy,dx,sx,sy,dw,dh,sw,sh);

例子:

<?PHP
$src = ImageCreateFromJPEG('php.jpg');
$width = ImageSx($src);
$height = ImageSy($src);
$x = $widht/2;
$y = $height/2;
$dst = ImageCreateTrueColor($x,$y);
ImageCopyResampled($dst,$src,0,0,0,0,$x,$y,$widht,$height);
header('Content-Type : image/png');
ImagePNG($det);
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved