gd是什么格式文件,手机打开gd文件方法

2021-11-14 414 阅读

又到了一个大家非常熟悉的库了,对于图像图形的处理来说,GD 库是 PHPer 们绕不过去的一道坎。从很早很早的 CMS 或者 Discuz 时代,各类开源软件在安装的时候就会明确地指出 GD 库是它们必备的一个扩展。当然,在现在的 PHP 版本中,相信大家也不会在编译的时候忽略掉这个库。不管你是为图片加水印、生成缩略图还是制作验证码图片,都离不开 GD 库的身影。

当然,我们还是由浅入深地学习一些 GD 库中的常用或好玩的函数。

gd是什么格式文件,手机打开gd文件方法

当前环境中的 GD 库信息

首先,我们可以查看下当前 PHP 环境中的 GD 库版本及支持的图片格式信息。

var_dump(gd_info());
// array(13) {
// ["GD Version"]=>
// string(26) "bundled (2.1.0 compatible)"
// ["FreeType Support"]=>
// bool(true)
// ["FreeType Linkage"]=>
// string(13) "with freetype"
// ["GIF Read Support"]=>
// bool(true)
// ["GIF Create Support"]=>
// bool(true)
// ["JPEG Support"]=>
// bool(true)
// ["PNG Support"]=>
// bool(true)
// ["WBMP Support"]=>
// bool(true)
// ["XPM Support"]=>
// bool(false)
// ["XBM Support"]=>
// bool(true)
// ["WebP Support"]=>
// bool(true)
// ["BMP Support"]=>
// bool(true)
// ["JIS-mapped Japanese Font Support"]=>
// bool(false)
// }

gd_info() 函数可以查看到当前 GD 库的版本信息,其它字段就是各种图片模式的支持情况,可以看到在我的系统环境中,除了 XPM 这种格式不支持外,其它各种图片格式都是正常支持的。最后一个是日文字体的支持,我们当前环境中也是没有的。

获取图片基本信息

getimagesize(),获取图片信息的这个函数,从名字上看是获取图片大小的一个函数但也包含一些其它的信息,而且这个函数其实和 GD 库没什么太大的关系,也就是说不需要 GD 库的扩展其实这个函数也是可以使用的。

var_dump(getimagesize("../img/1.png"));
// array(6) {
// [0]=>
// int(150)
// [1]=>
// int(150)
// [2]=>
// int(3)
// [3]=>
// string(24) "width="150" height="150""
// ["bits"]=>
// int(8)
// ["mime"]=>
// string(9) "image/png"
// }

返回的结果其实非常简单,0 和 1 分别就是图片的宽高,2 是图片的类型,之前的文章就讲过它对应的就是 IMAGETYPE_ 常量中对应的图片类型。3 是文字形式的图片宽高,可以直接用于 img 标签中,可以看出来,PHP 真的就是为了 web 而生的语言啊,连图片大小获取的函数都要带个这样的属性回来。bits 就是图片的 颜色比特位数 。mime 则是图片的 MIME 类型了。

另外,getimagesize() 函数还有第二个参数,这是一个引用类型的参数,它将以一个关联数组返回不同的 JPG APP 标识。也就是说,它也是针对 JPG 相关的图片获取一些额外的信息,其实就有点像上篇文章学习过的 EXIF 里面的信息。

var_dump(getimagesize("../img/2.jpg", $info));
// array(7) {
// [0]=>
// int(300)
// [1]=>
// int(244)
// [2]=>
// int(2)
// [3]=>
// string(24) "width="300" height="244""
// ["bits"]=>
// int(8)
// ["channels"]=>
// int(3)
// ["mime"]=>
// string(10) "image/jpeg"
// }

var_dump($info);
// array(1) {
// ["APP0"]=>
// string(14) "JFIF��"
// }

此外,我们如果是 JPG 图片的话,还会多返回一个 channels 属性,表示的是如果图片是 RBG 格式的,返回的就是 3 ,如果是 CMYK 格式的,返回的就是 4 。

我们还可以使用 getimagesize() 获得远程文件的信息。

var_dump(getimagesize("https://upload-images.jianshu.io/upload_images/1074666-8df66a94d61cac74.png?imageMogr2/auto-orient/strip|imageView2/2/w/374/format/webp"));
// array(6) {
// [0]=>
// int(374)
// [1]=>
// int(617)
// [2]=>
// int(18)
// [3]=>
// string(24) "width="374" height="617""
// ["bits"]=>
// int(8)
// ["mime"]=>
// string(10) "image/webp"
// }

除了直接操作图片文件之外,我们还可以直接从字符串中获得图片的信息。不过这些字符串一般也都是读取到的图片文件的二进制信息。你直接来一句真正的 Hello World 之类的字符串那打死它也解析不出来什么图片内容的。

$data = file_get_contents('../img/1.png');
var_dump(getimagesizefromstring($data));
// array(6) {
// [0]=>
// int(150)
// [1]=>
// int(150)
// [2]=>
// int(3)
// [3]=>
// string(24) "width="150" height="150""
// ["bits"]=>
// int(8)
// ["mime"]=>
// string(9) "image/png"
// }

获得图片的一些信息

我们可以通过图片的类型来获取文件的扩展名,这个类型常量也是 IMAGETYPE_ 类型的。

var_dump(image_type_to_extension(IMAGETYPE_PNG)); // string(4) ".png"
var_dump(image_type_to_extension(IMAGETYPE_JPEG, FALSE)); // string(4) "jpeg"

image_type_to_extension() 函数有第二个参数,如果设置为 false 的话,就不会加上那个 . 。

var_dump(image_type_to_mime_type(IMAGETYPE_PNG)); // string(9) "image/png"
var_dump(image_type_to_mime_type(IMAGETYPE_JPEG)); // string(10) "image/jpeg"

同样地,也有 image_type_to_mime_type() 这个函数来获得图片的 MIME 信息内容。另外,还有一个函数可以获得当前系统中所支持的图片类型都有哪些。

var_dump(imagetypes()); // int(111)

额,很奇怪吧,怎么只返回了一个 111 ?其实它是保存的二进制图片支持信息,比如如果我们想知道当前系统中有没有 PNG 图片的支持,就可以这样使用:

var_dump(imagetypes() & IMAGETYPE_PNG); // int(3)

和 IMAGETYPE_PNG 与之后的结果就是 IMAGETYPE_PNG 本身的值,这就说明当前系统中是支持这个图片类型的操作的。

小例子:创建一张自己的图片

最后,我们再来看一个小例子,其实就是利用 GD 库中的这些函数来创建一张简单的小图片。

$im = @imagecreate(100, 50) or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 255, 255, 255);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, "Test 测试", $text_color);
imagepng($im, '../img/test.png');
imagedestroy($im);

其实每个函数的内容都很好理解,函数名就已经写得很清楚了。当然,我们后面的文章中将详细地再学习一次。这个最终生成的图片中,中文也是乱码的,不过它已经是可以当做一个图片验证码来使用了,是不是非常地简单?

总结

今天的内容不多,也都是比较基础浅显的一些函数的使用。当然,这只是开头的第一篇文章,GD 库不是一个简单的小扩展,它里面的内容非常多,能够实现的功能也非常复杂,不要走开,持续关注哦!

点击展开全文
出门下雨代表什么预兆,出门下雨代表什么意思 百科

出门下雨代表什么预兆,出门下雨代表什么意思

我们在生活中有没有发现身边有一些人或者自己大多出门的时候,外面的天气就会转阴,然后下雨。说它是巧合吧,也不是完全巧合,但又不知道是怎么回事,我们从民间的一些传统伦理来说是带有一定的寓意的,那么你知道出...
阅读全文
班会小游戏,班级活动游戏 百科

班会小游戏,班级活动游戏

班会小游戏精选50个 班会小游戏(一): 1、成语接龙 这个游戏的名字只是用来迷惑大家,而并不是真的要接龙。选出几位年轻人上台,让大家先在纸上写出5个成语,因为游戏题目叫成语接龙,所以大家会研究的是成...
阅读全文
男人10处有痣是富贵痣,男人面相痣大全图解 百科

男人10处有痣是富贵痣,男人面相痣大全图解

对于每个家庭来说,总是少不了男人的存在,男人是家里的顶梁柱,男人的事业发展和生活质量决定了一生的命运如何。选择一个怎样的男人,也决定了一个女人的后半辈子的幸福!有人常常说男人哪里长痣最有福气?接下来呢...
阅读全文
cailinkanei是仿ck吗,cailinkanei是什么牌子 百科

cailinkanei是仿ck吗,cailinkanei是什么牌子

cailinkanei不是仿CK,但是确实有打擦边球的嫌疑,因为不管是在品牌名称、产品类型上两者却有很多相似的地方,但是两者的定位、产品外观等等差异很大。cailinkanei是个国产品牌,名字是彩林...
阅读全文
古代四大美女,中国四大美女是哪四位 百科

古代四大美女,中国四大美女是哪四位

古代四大美女 中国古代四大美女,即西施、王昭君、貂蝉、杨玉环,享有“沉鱼落雁之容,闭月羞花之貌”的美誉。 他们的故事也是流传千古,她们都具有倾国倾城之美貌,但之所以这么闻名,更是因为她们在历史上的影响...
阅读全文
口加当是什么字,口字旁加当是什么字 百科

口加当是什么字,口字旁加当是什么字

口加当是“噹”的简体字,读作dāng,在电脑字库中没有。这个字在我们的历史上曾经出现过,但是现在已经不用了。1956年的时候,国家对汉字进行了简化,把有偏旁的“噹”与无偏旁的“當”一并简化为“当”。 ...
阅读全文
鬼最怕的七种生肖,鬼怕什么属相生肖的人 百科

鬼最怕的七种生肖,鬼怕什么属相生肖的人

虽然并没有实据,但是自古以来关于鬼怪的传说从未停止,而且据说不止人怕鬼,鬼其实也会怕人,那鬼一般会害怕什么人呢?按属相划分的话,鬼最怕的生肖包括:生肖鼠、生肖狗、生肖龙、生肖虎、生肖牛、生肖马和生肖鸡...
阅读全文
第四爱是什么意思,四爱是什么意思 百科

第四爱是什么意思,四爱是什么意思

第四爱(Reverse Love story),即独立于第一类爱情(普通男女之恋)第二类爱情(男男之恋)、第三类爱情(女女之恋)外的第四类爱情,是指“女攻男受(女性强势,男性弱势)”的爱情模式。 第四...
阅读全文