1.添加水印
流程如上,PHP添加水印的可分为一下四步
打开图片;操作图片; 输出图片 ; 销毁图片
1.1 : 打开图片
代码片段
打开图片,并查看 , 代码如下:
<?php
/*打开图片*/
//1.配置图片路径(填入你的图片路径)
$src="http://img.php.cn/upload/course/000/000/004/581454f755fb1195.jpg";
//获取图片信息
$info = getimagesize($src);
echo "<pre>";
print_r($info);
?>
返回结果
结果返回一个具有四个单元的数组。
Array
(
[0]=>1920
[1]=>1200
[2]=>2
[3]=>width="1920" height="1200"
[bits]=>8
[channels]=>3
[mime]=>image/jpegs
)
解读
索引 0 包含图像宽度的像素值,
索引 1 包含图像高度的像素值。
索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIF
F(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB
2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。
这些标记与 PHP 4.3.0 新加的 IMAGETYPE 常量对应。
索引 3 是文本字符串,内容为"height="yyy" width="xxx"",可直接用于 IMG 标记。
复制图片
通过得到图像信息数组,可以通过图像的编号来获取图像的类型
$type=image_type_to_extension($info[2],false);
//在内存中创建一个和我们图像类型一样的图像
$fun = "imagecreatefrom{$type}";
$image=$fun($src);
//把图像复制到我们的内存上
完整代码
完全代码如下
<?php
/*打开图片*/
//1.配置图片路径(填入你的图片路径)
$src="http://img.php.cn/upload/course/000/000/004/581454f755fb1195.jpg";
//获取图片信息
$info = getimagesize($src);
//通过图像的编号来获取图像的类型
$type=image_type_to_extension($info[2],false);
//在内存中创建一个和我们图像类型一样的图像
$fun = "imagecreatefrom{$type}";
//把图片复制到我们的内存中
$image=$fun($src);
?>
1.2 :操作图片 &1.3输出图片
下面是操作图片
代码片段
/*操作图片*/
//设置字体的路径
$font="/tpl/Index/Static/css/img/fonts/Christmas.ttf";
//添加内容
$content="欢迎来到 杰哥博客 ";
//设置字体的颜色和透明度
$col= imagecolorallocatealpha ($image,255,255,255,30);
//写入文字
imagettftext($image,20,0,20,30,$col,$font,$content);
解读
int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
imagecolorallocatealpha() 的行为和 imagecolorallocate() 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示完全透明。
imagettftext函数:
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
参数
image由图象创建函数(例如imagecreatetruecolor())返回的图象资源。
size字体的尺寸。根据 GD 的版本,为像素尺寸(GD1)或点(磅)尺寸(GD2)。
angle角度制表示的角度,0 度为从左向右读的文本。更高数值表示逆时针旋转。例如 90 度表示从下向上读的文本。
x由 x,y 所表示的坐标定义了第一个字符的基本点(大概是字符的左下角)。这和 imagestring() 不同,其 x,y 定义了第一个字符的左上角。例如 "top left" 为 0, 0。
y Y 坐标。它设定了字体基线的位置,不是字符的最底端。
color颜色索引。使用负的颜色索引值具有关闭防锯齿的效果。见 imagecolorallocate()。
fontfile是想要使用的 TrueType 字体的路径。
完整 代码
<?php
/*打开图片*/
//1.配置图片路径(填入你的图片路径)
$src="http://img.php.cn/upload/course/000/000/004/581454f755fb1195.jpg";
//获取图片信息
$info = getimagesize($src);
//通过图像的编号来获取图像的类型
$type=image_type_to_extension($info[2],false);
//在内存中创建一个和我们图像类型一样的图像
$fun = "imagecreatefrom{$type}";
//把图片复制到我们的内存中
$image=$fun($src);
/*操作图片*/
//设置字体的路径
$font="/tpl/Index/Static/css/img/fonts/Christmas.ttf";
//添加内容
$content="欢迎来到 杰哥博客 ";
//设置字体的颜色和透明度
$col= imagecolorallocatealpha($image,255,255,255,30);
//写入文字
imagettftext($image,20,0,20,30,$col,$font,$content);
/*输出图片*/
//浏览器输出
header("Content-type:".$info['mime']);
$func="image{$type}";
$func($image);
//保存图片
$func($image,'FFF.'.$type);
/*销毁图片*/
imagedestroy($image);
?>
定义个变量$func。
从浏览器直接输出。
或者自定义名称保存图片输出。
这样图片添加文字水印就完成。
1.4 :销毁图片
完整代码
<?php
/*打开图片*/
//配置图片路径
$src = "http://img.php.cn/upload/course/000/000/004/581454f755fb1195.jpg";
//获取图片的基本信息
$info=getimagesize($src);
//通过图像的编号来获取图片的类型
$type=image_type_to_extension($info[2],false);
//内存中创建一个和我们图像类型一致的图像
$fun = "imagecreatefrom{$type}";
//把要操作的图片复制到内存中
$image=$fun($src);
//设置水印路径
$image_Mark = "http://img.php.cn/upload/course/000/000/004/5814594e3e7c9278.png";
//获取水印的基本信息
$info2=getimagesize($image_Mark);
//通过水印的图像编号来获取水印的图片类型
$type2=image_type_to_extension($info2[2],false);
//在内存中创建一个和水印图像一致的图像类型
$fun2="imagecreatefrom{$type2}";
//把水印复制到内存中
$water = $fun2($image_Mark);
//合并图片
imagecopymerge($image,$water,60,40,0,0,$info2[0],$info2[1],30);
//销毁水印图片
imagedestroy($water);
?>
代码 解读
getimagesize — 取得图像大小
image_type_to_extension-返回后缀名。
然后存入内存中,用imagecopymerge函数合并图片添加水印
imagecopymerge — 拷贝并合并图像的一部分
header("Content-type:",$info['mime']);
$funs = "image{$type}";
$funs($image);
$funs($image,'FFFF.'.$type);
代码解析:
定义个变量$funcs输出图片然后再销毁图片
对图片添加图片水印完成。
$info['mime']的解释
如果写成header('content_type:image/jpeg') 这样,就表示类型只能是图片类型,而且只能是jpeg格式的 ; 而写成header('content_type:'.$info['mime']),content_type是有上传的文件决定的,是可变的(如果是png图片就是image/png),更灵活!
我们再来看看之前的图片信息数组
print_r($info);
Array
(
[0] => 850
[1] => 511
[2] => 3
[3] => width="850" height="511"
[bits] => 8
[mime] => image/png
)
2.制作缩略图
打开图片
<?php
/*打开图片*/
$src = "http://img.php.cn/upload/course/000/000/004/581454f755fb1195.jpg";
$info = getimagesize($src);
$type = image_type_to_extension($info[2],false);
$fun = "imagecreatefrom{$type}";
$image = $fun($src);
?>
操作图片
/*操作图片*/
//在内存中建立一个宽300高200的真色彩图片
$image_thumb = imagecreatetruecolor(300,200);
//将原图复制到新建的真色彩图片上,并且按照一定比例压缩(参数1:真色彩图片,参数2:原图,参数3,4,5,6:原图和真色彩图的起始点,参数7,8:原图和真色彩图的结束点,参数9:原图宽,参数10:原图高)
imagecopyresampled($image_thumb,$image,0,0,0,0,300,200,$info[0],$info[1]);
//销毁原始图片
imagedestroy($image);
代码解析:
首先在内存中建立一个规定大小的彩色画布。
imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。
使用函数imagecopyresampled()
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
源图象的高度。
然后将复制在内存中给的图片销毁。
输出图片
然后输出图像
/*输出图片*/
header("Content-type:".$info['mime']);
$funs = "image{$type}";
$funs($image_thumb);
//保存到硬盘
$funs($image_thumb,"thumb_image.".$type);
/*销毁图片*/
imagedestroy($image_thumb);