一、图像处理概述

1、开启GD2图像扩展库

①PHP不仅限于只产生HTML的输出,还可以创建与操作多种不同格式的图像文件。PHP提供了一些内置的图像处理函数,也可以使用GD函数库创建新图像或处理已有的图像。目前GD2库支持JPEG、PNG和WBMP格式。

②GD扩展用于动态创建图片,使用C语言编写,开放源代码,现在的版本是2.0,所以称为GD2。

③开启GD2扩展库:将php.ini中extension=php_gd2.dll选项前的分号去掉,重启。

图片.png

2、查看图像拓展库GD2是否开启

图片.png

图片.png

3、创建图像的大致步骤

①创建画布:创建一个画布,以后的操作都基于此画布操作;

②绘制图形:在画布上绘制图像轮廓或输入文本;

③输出图像:也可以另存为;

④释放资源:释放图像占用的内存资源。

图片.png

4、画布坐标系说明

下图说明了画布的坐标系。坐标原点位于画布左上角,以像素为单位。

图片.png

二、创建图像和销毁图像

1、创建基于已有图像的图像imagecreatefromjpeg()

1)描述:由文件或 URL 创建一个新图象。

2)语法:resource imagecreatefrompng ( string $filename )

3)参数:$filename为图像的完整路径。

4)返回:成功后返回图象资源,失败后返回 FALSE 。

5)提示:imagecreatefrompng()和imagecreatefromgif()语法与该函数一样。

示例:

//从已知背景上来创建画布

//成功返回图片资源型数据,失败返回false

$filename="./abc.jpg";

$img=imagecreatefromjpeg($filename);

//告诉浏览器以图像数据来显示

header("content-type:image/jpeg");

//输出图像

imagejpeg($img);

//关闭图像释放资源

imagedestroy($img);

图片.png

2、创建空画布图像imagecreatetruecolor()

1)描述:新建一个真彩色图像,支持24位色,即RGB(256,256,256)。

2)语法:resource imagecreatetruecolor ( int $width , int $height )

3)参数:$width图像宽度;$height图像高度;

4)返回:成功后返回图象资源,失败后返回 FALSE 。

示例:

//创建一个空画布

$img=imagecreatetruecolor(300,300);

//告诉浏览器以图像数据来显示

header("content-type:image/jpeg");

//输出图像

imagejpeg($img);

//关闭图像释放资源

imagedestroy($img);

图片.png

3、销毁图像资源imagedestroy()

1)描述:销毁一图像。释放与 image图像标识符关联的内存。

2)语法:bool imagedestroy ( resource $image )

3)参数:$image为由imagecreatetruecolor()创建的图像标识符。

三、图像操作

1、为图像分配颜色imagecolorallocate()

1)语法:int imagecolorallocate(resource $image,int $red,int $green,int $blue)

2)参数:$image图像资源标识符;

3)提示:第一次对 imagecolorallocate()的调用会给图像填充背景色。

图片.png

2、输出图像到浏览器或保存文件imagejpeg()

1)描述:以 JPG/GIF/PNG 格式将图像输出到浏览器或文件

2)语法:bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )

3)参数:

a、$filename,将创建的图像保存到文件;如果省略,则直接在浏览器输出。

b、如果要省略这个参数而提供 quality 参数,使用NULL。

c、quality 为可选项,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。默认的质量值(大约 75)。

4)提示:imagegif()、imagepng(),与imagejpeg()格式一样,但没有第3个参数。

示例:

//创建一个空画布

$img=imagecreatetruecolor(300,300);

//给画布分配颜色

//十进制表示方法

$color=imagecolorallocate($img,255,255,0);

//绘制带填充的矩形

imagefilledrectangle($img,30,30,100,80,$color);

//保存图像,如果文件夹内有重名文件会覆盖

//注意:质量只针对jpg格式图片有效

imagejpeg($img,'./fuben/fuben.jpeg',100);

imagegif($img,'./fuben/fuben.gif');

imagepng($img,'./fuben/fuben.png');

//关闭图像释放资源

imagedestroy($img);

指定文件夹内产生如下文件:

图片.png

3、水平地画一行字符串imagestring()

1)语法:bool imagestring(resource $img,int $font,int $x,int $y,string $s,int $col)

2)参数:

a、$img 图像资源;

b、$font字体大小,取值1、2、3、4、5,使用内置字体;

c、$x,$y绘制字符串的开始坐标,一般在字符串左上角;

d、$s 代表要绘制的一行字符串;

e、$col 代表文本颜色。

f、$s,代表一行字符串;$col,代表文本颜色;

4、获取画布的宽度和高度

1)宽度:int imagesx ( resource $image )

2)高度:int imagesy ( resource $image )

5、获取内置字体的宽度和高度

1)描述:返回指定字体一个字符宽度或高度的像素值。

2)字体宽度:int imagefontwidth ( int $font )

3)字体高度:int imagefontheight ( int $font )

4)提示:$font为字体大小,取值1-5,最大为5。

6、画一矩形并填充

1)语法:bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

2)参数:

a、$x1 , $y1 左上角坐标;

b、$x2 , $y2 右上角坐标;

c、$color 填充背景色。

综合示例:在画布上居中显示字符串

//创建一个空画布

$width=300;

$height=200;

$img=imagecreatetruecolor($width,$height);

//给画布分配颜色

$color1=imagecolorallocate($img,200,200,200);

$color2=imagecolorallocate($img,200,0,0);

//绘制带填充的矩形

imagefilledrectangle($img,0,0,$width,$height,$color1);

//往画布上写一行居中的字符串

$font=5;

$str='Hello world!';

$fontwidth=imagefontwidth($font);

$fontheight=imagefontheight($font);

$x=($width-$fontwidth*strlen($str))/2;

$y=($height-$fontheight)/2;

imagestring($img,$font,$x,$y,$str,$color2);

//声明网页内容类型为图像

header("content-type:image/png");

//输出图像

//此处细节,用png更清楚,如果用jpeg格式文字周边会稍有模糊

imagepng($img);

//销毁图像

imagedestroy($img);

结果如下:

图片.png

7、画一个单一像素

1)描述:画一个单一像素

2)语法:bool imagesetpixel ( resource $image , int $x , int $y , int $color )

3)说明:imagesetpixel() 在 image图像中用 color颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。

8、用 TrueType 字体向图像写入文本

1)语法:array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )

2)参数:

a、$size,字号大小,自定义,同word字号一样;

b、$angle,旋转角度(0~360);

c、$x和$y,定义了第一个字符的基本点(大概是字符的左下角)。

d、$fontfile,是想要使用的 TrueType 字体的绝对路径;

e、$text,UTF-8 编码的文本字符串(其它编码要进行转换)。

9、为图像分配透明颜色imagecolorallocatealpha()

1)语法:int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )

2)说明:imagecolorallocatealpha() 的行为和 imagecolorallocate() 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0表示完全不透明,127 表示完全透明。

示例:水印制作

//创建画布

$img=imagecreatetruecolor(300,200);

$color=imagecolorallocate($img,200,200,200);

//设置透明颜色

$color_alpha=imagecolorallocatealpha($img,0,0,255,100);

//设置画布背景色

imagefilledrectangle($img,0,0,300,200,$color);

//设置水印文字

imagettftext($img,30,0,130,170,$color_alpha,'./font/ygy.ttf','图片水印');

//输出画布图像

header("content-type:image/png");

imagepng($img);

imagedestroy($img);

结果如下:

图片.png

10、生成图像缩略图

1)描述:将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。

2)语法: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 )

3)参数:

a、$dst_image,目标图像;

b、$src_image,源像图;

c、$dst_x和$dst_y,目标图像x、y坐标;

d、$src_x和$src_y,源图像x、y坐标;

e、$dst_w和$dst_h,目标图像的宽度和高度;

f、$src_w和$src_h,源图像的宽度和高度;

4)提示:如果源和目标的宽度和高度不同,则会进行相应的图像收缩和拉伸。

示例:

//从已知背景上来创建画布

$img_src = imagecreatefromjpeg('./img/abc.jpg');

$src_w = imagesx($img_src);

$src_h = imagesy($img_src);

//创建缩略画布

$dst_w = $src_w*0.5;

$dst_h = $src_h*0.5;

$img_dst = imagecreatetruecolor($dst_w,$dst_h);

//复制原图像素并插入到缩略图中

imagecopyresampled($img_dst,$img_src,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);

//保存并关闭图像释放资源

imagejpeg($img_dst,'./img/abc_dst.jpg');

imagedestroy($img_src);

imagedestroy($img_dst);

结果如下:

图片.png

标签:src,img,int,image,GD,图像处理,图像,PHP,dst

来源: https://www.cnblogs.com/zst062102/p/10524732.html

php中的gd图像处理,PHP图像处理(GD库)相关推荐

  1. 3 3中值滤波 matlab,MATLAB中值滤波在灰度图像处理中的应用研究和仿真(3)

    MATLAB中值滤波在灰度图像处理中的应用研究和仿真(3) 时间:2016-11-30 21:28来源:毕业论文 3.2 中值滤波的仿真 3.2.1 中值滤波仿真函数介绍 MATLAB能够支持多种图像 ...

  2. 整理智能车中使用到的摄像头图像处理算法

    整理智能车中使用到的摄像头图像处理算法 19年的智能车竞赛给我留下了很深远的影响,不管是算法思路还是解决问题的方法对我来说都受益匪浅.今天整理资料时又翻出这些代码,回忆起做车时不分日夜地在赛道上调试, ...

  3. 2021年用于图像处理的Python顶级库

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 介绍 正如IDC所指出的,数字信息将飙升至175 ZB,而这些信息中的巨大一部分是图片.数据科学家需要 ...

  4. Python图像处理丨OpenCV+Numpy库读取与修改像素

    本文分享自华为云社区<[Python图像处理] 二.OpenCV+Numpy库读取与修改像素>,作者: eastmount. 一.传统读取像素方法 1.灰度图像,返回灰度值. 返回值=图像 ...

  5. 不容错过,数据分析中最常用的10大Python库

    学习数据分析绝非易事,有无数种工具和资源可供使用.因此,有时会让我们很难弄清楚该学习什么技能,该使用哪种工具. 在本文中,我们就来给大家介绍一下数据分析中最常用的10个Python库.看看这些库你都用 ...

  6. bpexpdate – 更改映像目录库中备份的截止日期以及介质目录库中介质的截止日期nbu...

    1.根据bpdbjobs查找backupid bpdbjobs -jobid xxx -all_columns|grep backupid 2.查看数据保留时间 [root@backup]# bpim ...

  7. 解决 Android 中出现依赖多个版本支持库的问题

    解决 Android 中出现依赖多个版本支持库的问题 参考文章: (1)解决 Android 中出现依赖多个版本支持库的问题 (2)https://www.cnblogs.com/lshare/p/1 ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 /system/lib/libc.so 动态库中的 mmap 函数地址 )

    文章目录 一.获取 远程 目标进程 中的 /system/lib/libc.so 动态库中的 mmap 函数地址 二.从 /proc/pid/maps 文件中获取 指定 进程 中的 /system/l ...

  9. 面试官:Mysql 中主库跑太快,从库追不上怎么整?

    作者|莱乌 写这篇文章是因为之前有一次删库操作,需要进行批量删除数据,当时没有控制好删除速度,导致产生了主从延迟,出现了一点小事故. 今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题 ...

  10. 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档

    在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...

最新文章

  1. ubuntu18.04上安装TensorFlow2.0
  2. 感知不强又徒增功耗?为何今年5G手机也这么重视AI
  3. 程序默认在副屏显示_聊一款性价比极高的电竞显示器
  4. 2020 China Collegiate Programming Contest Weihai Site补题部分
  5. MySQL创建用户报错 -- ERROR 1396 (HY000): Operation CREATE USER failed for ‘user_name‘@‘localhost‘
  6. OpenGL-坐标系
  7. 如何linux保留内存,Linux内核中实现保留内存的方法
  8. webpack打包优化之外部扩展externals的实际应用
  9. Qt4_快速设计对话框
  10. 全球科研城市榜出炉:前二十强中国城市占6席,北京居首
  11. 13、三维图绘制及添加文本
  12. 【安全科普】AD域安全管理(一)
  13. OLS回归模型-斯皮尔曼相关系数-数值模拟-多目标规划-养老服务床位需求预测与运营模式研究-之数学建模
  14. 推荐测温软件SpeedFan 4.32
  15. 造一个智能语音音箱!!!太简单了【语音智能管家】
  16. ES 中时间日期类型 “yyyy-MM-dd HH:mm:ss” 的完全避坑指南
  17. Python自制恶搞virus
  18. C#调用12306API做余票查询
  19. 【论文解读】Optimizing FPGA-based Accelerator Design for Deep Convolutional Neural Networks
  20. 【Unity】物体爆炸,碎片横飞

热门文章

  1. Python小程序(3)--BMR(基础代谢率)计算器
  2. 测试固态硬盘写入数据软件,SSD测试软件简要说明
  3. Java用户修改头像接口
  4. iTextSharp 页面设置
  5. 解决mescroll固定位置上拉加载无效果?真的只需一步
  6. cglib 动态代理原理详解
  7. Qt学习之QDir的使用(使用QDir创建文件夹)
  8. Ubuntu下安装PyV8
  9. Jsonp 原理简述
  10. 微信小程序 上传图片(多张/单张)