0

0

说说PHP作图(四)(完)

php中文网

php中文网

发布时间:2016-06-21 09:08:22

|

1566人浏览过

|

来源于php中文网

原创

    到前面为止,我们已经能够用GD完成作图基本的需要了。但有的时候恐怕就要嫌ImageString
能用的五种字体少而且难看,那就要用到下面的函数了。这个函数允许我们使用TTF字体;但你
必须拥有这些字体的文件。

  Header("Content-type: image/png");
  $im = ImageCreate(400,250);
  $col_back = ImageColorAllocate($im,136,200,152);
  $col_write = ImageColorAllocate($im,255,255,255);
  $col_black = ImageColorAllocate($im,0,0,0);
  
  ImageTTFText($im,160,15,40,220,$col_black,"C:/windows/fonts/verdana.ttf","PNG");
  // 新的内容只有这一句。参数是这样的:
  // $im 不用说了。 160 这个位置,是字号(pt)。15 字串是倾斜角度,水平方向起逆时针。
  // 40,220是横纵坐标。注意,跟ImageString不同的是,
  // ImageString里指定的坐标是字串的左上角,而ImageTTFText指定的坐标是左下角。
  // 接下来 $col_black 是颜色喽,
  // "C:/windows/fonts/verdana.ttf"是字体文件路径,在Linux就是"/.../....."。
  // 甚至可以是 "http://...."。但是,我没有这样用过,也不推荐这样用。
  // 因为不在自己机器上的东西终究是不可靠的,不可以委以重任。
  // 最后就是要输出的字符串了。这是尤其要引起注意的,
  // 这里的字符串要用UTF-8编码!!!
  // ASCII码 0~127的字符,ASCII码等于UTF-8编码,所以我们在输出西文字符串的时候不需要转换。
  // 而如果要输出中文,则需要一系列的转换。
  // www.phpx.com的sadly写了一个GB2312码到UTF-8码转换的函数。
  // 我的另一篇文章专门分析了这个函数的工作原理。
  
  ImagePNG($im);
  ImageDestroy($im);
?>

    类似于ImageFontWidth()和ImageFontHeight()帮助我们计算ImageString输出字串将要占用的
高度和宽度,ImageTTFBBox可以帮助我们计算ImageTTFText输出字符串的情况。它的返回值是一个
8成员的数组,分别是(注意这个顺序)左下、右下、右上、左上 的横纵坐标。试一下:


  $p=ImageTTFBBox(160,0,"C:/windows/fonts/verdana.ttf","PNP");
  for($i=0;$i    echo "(".$p[$i].",".$p[$i+1].")"."
";
?>

结果是这样的:
(15,-1)
(306,-1)
(306,-117)
(15,-117)

    为什么出现负数?我也不知道。这些坐标是相对于什么的?无论它是相对于什么,他们之间的
相对位置是不会改变的。所以,这些都不太重要,我们根据左、右边的横坐标的差和上、下边纵坐标
的差,就足够计算出应该把左下点安排在什么位置了。

    好了,讲完了利用TTF字体输出字符串,也顺便解决了前面“要想写汉字还得费一些麻烦”的
遗留话柄。以我来看,GD还剩下最后一部分内容——打开现有图片、处理、重新输出。

    首先,取得图片的信息,是基本的需要。看下面的例子:

  $im=ImageCreateFromPNG("test.png");
  // 这就是打开已经存在的图象。
  // 很简单,参数是图片路径,返回值是图象ID。
  
  echo "The image's width is ".ImageSX($im).", and height is ".ImageSY($im).".";
  // ImageSX()和ImageSY分别是得到图象的宽和高,他们都只需要一个参数——已经打开的图象ID。

?>

    另外,还有一个不属于GD库的获取图象信息的函数:GetImageSize。


  $p=GetImageSize("test.png");
  for($i=0;$i";

?>

结果是这样的:
50
100
3
width="50" height="100"

    可见,该函数返回了一个关于该图片信息的数组,四个元素分别为:前两个是图象的宽、高;
第三个代表图象的格式:1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP。最后一个
元素是用在HTML里的表示该图象宽、高的字串(真是太方便了!)。比如我们可以这样用:


....
$pic_name="....";
$pic_size=GetImageSize($pic_name);

?>
说说PHP作图(四)(完)>

.....

    再重复一遍,这个函数不属于GD库,所以,在没有装GD库的PHP环境中也可以使用!!


    缩略图是经常需要的功能。使用GD的“拷贝并调整大小”的函数可以很容易实现缩略图。
    

  // 假设要把任意大小的图片缩小(放大)到宽200象素。
  // Header("Content-type: image/jpeg");
  $pic_name="test.jpg";
  $ims=ImageCreateFromJPEG($pic_name);
  // 打开原图。
  
  $owidth=ImageSX($ims);
  $oheight=ImageSY($ims);
  // 取得原图的宽、高。
  
  $nheight=Round($oheight*200.0/$owidth);
  // 计算新图的高度。
   
  $imt=ImageCreate(200,$nheight);
  // 建立新图。
  
  ImageCopyResized($imt,$ims,0,0,0,0,200,$nheight,$owidth,$oheight);
  // 拷贝到新图并调整大小。
  // 这个函数参数比较多,首先,是目的图象和原图象的ID,
  // 然后的四个参数是目的图象和原图象的拷贝位置的坐标。
  // 如从原图象的 20,30 拷到目的图象的 10,0
  // 则这四个参数是 10,0,20,30。
  // 再接下来的四个也是最后四个参数是目的图象和原图象的拷贝区域的宽高,
  // 如从原图象拷贝 100x50 那么大的区域到目的图象并缩小到 50x25
  // 则这四个参数是 50,25,100,50。
  // 而这里我使用的参数,是将原图完整地拷贝到新图,(拷贝位置均为 0,0)
  // 将原始大小无论放大还是缩小,均调整到宽200象素。
  // 200,$nheight 是新图的宽、高,$owidth,$oheight是原图的宽、高。
  // 使用这个函数的时候注意每一组参数里,
  // 都是与目的图象相关的参数在前,与原图象相关的参数在后。
  
  ImageJPEG($imt);
  ImageDestroy($imt);
  ImageDestroy($ims);
?>


    好了,说到这里,我的在做GD过程中的心得就全部说完了。感谢大家的关注!让我们共同进步!



PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

19

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

27

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

15

2026.02.03

c语言中/相关合集
c语言中/相关合集

本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

3

2026.02.03

漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题
漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题

本专题围绕漫蛙漫画(Manwa / Manwa2)官网网页版入口进行整理,涵盖漫蛙漫画官方主页访问方式、网页版在线阅读入口、台版正版漫画浏览说明及基础使用指引,帮助用户快速进入漫蛙漫画官网,稳定在线阅读正版漫画内容,避免误入非官方页面。

13

2026.02.03

Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口
Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口

本专题汇总了俄罗斯知名搜索引擎 Yandex 的官网入口、免登录访问地址、中文登录方法与网页版使用指南,帮助用户稳定访问 Yandex 官网,并提供一站式入口汇总。无论是登录入口还是在线搜索,用户都能快速获取最新稳定的访问链接与使用指南。

114

2026.02.03

Java 设计模式与重构实践
Java 设计模式与重构实践

本专题专注讲解 Java 中常用的设计模式,包括单例模式、工厂模式、观察者模式、策略模式等,并结合代码重构实践,帮助学习者掌握 如何运用设计模式优化代码结构,提高代码的可读性、可维护性和扩展性。通过具体示例,展示设计模式如何解决实际开发中的复杂问题。

3

2026.02.03

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

2

2026.02.03

Python 强化学习与深度Q网络(DQN)
Python 强化学习与深度Q网络(DQN)

本专题深入讲解 Python 在强化学习(Reinforcement Learning)中的应用,重点介绍 深度Q网络(DQN) 及其实现方法,涵盖 Q-learning 算法、深度学习与神经网络的结合、环境模拟与奖励机制设计、探索与利用的平衡等。通过构建一个简单的游戏AI,帮助学习者掌握 如何使用 Python 训练智能体在动态环境中作出决策。

3

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 15.3万人学习

Pandas 教程
Pandas 教程

共15课时 | 1万人学习

C# 教程
C# 教程

共94课时 | 8.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号