75、PHP图像处理之建立画布填充颜色、打开不同图像类型处理

阅读() @2018-10-29 18:16:08

确认GD库是否已经正常加载:

/*第一种方法*/
 echo '<pre>';
 print_r(get_extension_funcs('gd'));

/*第二种方法(比较常用)*/
var_dump(extension_loaded('gd'));

通过PHP操作画布、图像与PhotoShop类似,只是没有PhotoShop处理图像那么强大,但是原理是一样的。

1、建立一张画布,指定画布大小:

header('content-type:image/gif');
$img_gif1 = imagecreate(100,100);//普通画布
$img_gif2 = imagecreatetruecolor(200,200);//真彩色画布

注意文件编码是ANSI格式,不能是UTF8,否则图像不能正常显示。

2、画布默认是黑色的,如果想要指定画布颜色,代码如下:

$red = imagecolorallocate($img_gif1,255,0,0);
$white = imagecolorallocate($img_gif2,255,255,255);

3、将画布显示在浏览器界面中:

imagegif($img_gif1);
imagegif($img_gif2);

到目前为止,如果操作的是普通画布,已经可以看到一个红色的正方形图像了,如果是真彩色画布,还需要给画布手动填充颜色才能生效,代码如下:

imagefill($img_gif2,0,0,$white);

/*
//imagefill( resource image, int x, int y, int color );
//x,y 分别为填充的起始 x 坐标和 y 坐标,与 x, y 点颜色相同且相邻的点都会被填充。
*/

建立普通画布和真彩色画布完整代码如下:

header("content-type:image/gif");
$img_gif1 = imagecreate(200,200);
$red = imagecolorallocate($img_gif1,255,0,0);
imagegif($img_gif1);

$img_gif2 = imagecreatetruecolor(200,200);
$white = imagecolorallocate($img_gif2,255,255,255);
imagefill($img_gif2,0,0,$white);
imagegif($img_gif2);

因为jpeg图是有损压缩,png和gif图都是无损压缩,所以在执行imagejpeg()函数的时候,还可以将图像重命名并存储到本地,并且制定压缩比(0-100),100是压缩效果最好的。

$img = imagecreatetruecolor(300, 300);
$red = imagecolorallocate($img, 255, 0, 0);

$rect = imagerectangle($img, 10, 10, 180,180, $red);

header('Content-type:image/jpeg');
imagejpeg($img,null,10);
//null表示不存储,10表示压缩比。可以看到图像很模糊了

以上介绍了怎样建立一个画布,并且填充颜色,下面要说的是打开不同图像类型的处理方法,包括gif、jpeg、png等。

假如,我们用变量接收到一张图片,代码如下:

$fileName = 'pic.png';

这里介绍三种方法来打开这张图片,第三种方法对简单。

第一种:

$base = substr(strrchr(strtolower($fileName),'.'),1);
switch($base){
	case 'gif':
		$img = imagecreatefromgif($fileName);
		break;
	case 'jpeg';
		$img = imagecreatefromjpeg($fileName);
		break;
	case 'png':
		$img = imagecreatefrompng($fileName);
		break;
	default:
		die('文件类型不正确');
}
header('Content-type:image/jpeg');
imagejpeg($img); 

第二种:

$imginfo = getimagesize($fileName);
$base = substr(strrchr(strtolower($imginfo['mime']),'/'),1);
switch($base){
	case 'gif':
		$img = imagecreatefromgif($fileName);
		break;
	case 'jpeg':
		$img = imagecreatefromjpeg($fileName);
		break;
	case 'png':
		$img = imagecreatefrompng($fileName);
		break;
	default:
		die('文件类型不正确');
}
header('Content-type:image/jpeg');
imagejpeg($img);

第三种:

$base = substr(strrchr(strtolower($fileName),'.'),1);
eval('$img = imagecreatefrom'.$base.'($fileName);');
header('Content-type:image/jpeg');
imagejpeg($img);

关键点是imagecreatefromjpeg、imagecreatefromgif、imagecreatefrompng这三个函数,最开始接收到图像信息的时候,要判断这样图的是什么类型的图像。

微信二维码
锐壳主机