水印和缩略图模块

本文介绍如何使用PHP进行图片处理,包括添加文字水印、图片水印及制作缩略图等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 = GIF2 = JPG3 = PNG4 = SWF5 = PSD6 = BMP7 = TIF

 F(intel byte order)8 = TIFF(motorola byte order)9 = JPC10 = JP211 = JPX12 = JB

 213 = SWC14 = IFF15 = WBMP16 = 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 1270 表示完全不透明,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 度表示从下向上读的文本。

xxy 所表示的坐标定义了第一个字符的基本点(大概是字符的左下角)。这和 imagestring() 不同,其 xy 定义了第一个字符的左上角。例如 "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);

?>

操作图片

/*操作图片*/

//在内存中建立一个宽300200的真色彩图片

$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);

 

一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值