PHP 第15章 图片函数 PHP 第15章 图片函数

2019-08-25

一、PHP 使用内置函数生成图片的方法详解

①、简单介绍

主要介绍了PHP使用内置函数生成图片的方法,结合实例形式详细分析了php生成图片的步骤与相关实现技巧

②、代码

//创建一张空图片:参数为宽度和高度
$myImage = ImageCreate(400,60);
//创建颜色
$white = ImageColorAllocate($myImage, 255, 255, 255);
$black = ImageColorAllocate($myImage, 0, 0, 0);
$red = ImageColorAllocate($myImage, 255, 0, 0);
$green = ImageColorAllocate($myImage, 0, 255, 0);
$blue = ImageColorAllocate($myImage, 0, 0, 255);
//为图片添加文字
imagettftext($myImage, 12, 0, 5, 20, $black, "stxingka.ttf", "这里是要显示的内容");
//生成图片
imagepng($myImage,"xxx.jpg");

二、php 输出图片

$fileres = file_get_contents("https://www.lulublog.cn/images/userImage/defaultImage.jpg");
header("Content-type: image/jpeg");
echo $fileres;

三、PHP 中 Orientation 属性判断上传图片是否需要旋转

①、问题来源

当使用苹果的iOS系统拍照上传图片的时候,可能会遇到图片被旋转的问题,这主要是取决于你拍照时拍照按钮的位置。假设拍照时你把手机旋转过来底部朝上,那拍出来的照片也是被旋转了的。

②、代码(下面的代码将确保所有上传的照片在上传时都能是正确定向:)

$image = imagecreatefromstring(file_get_contents($_FILES["image_upload"]["tmp_name"]));
$exif = exif_read_data($_FILES["image_upload"]["tmp_name"]);
if(!empty($exif["Orientation"])) {
    switch($exif["Orientation"]) {
          case 8:
               $image = imagerotate($image,90,0);
               break;
          case 3:
               $image = imagerotate($image,180,0);
               break;
          case 6:
               $image = imagerotate($image,-90,0);
           break;
     }
}

②、抓取远程图片到本地,可以用什么函数?

file_get_contents、curl

四、使用 phpQrCode 生成二维码

4.1、下载 qrcode

放置于服务器根目录

4.2、在服务器根目录新建 index.php

include 'phpqrcode/qrlib.php';
$url = 'https://www.lulublog.cn';
/*
 * 生成png 格式的文件并保存
 * 参数详解
 * 参数1 一个二维码的数据信息 可以是数值 网址等等数据
 * 参数2 生成的二维码保存的文件名称(图片保存位置
 * 参数3 容错级别  QR_ECLEVEL_L
 * 参数4 生成图片的大小
 * 参数5 二维码边缘大小
 * 以下分别为大小不同的图片生成实例
 */
QRcode::png($url,'text7.png', QR_ECLEVEL_L, 7,2);
echo '';
QRcode::png($url,'text6.png', QR_ECLEVEL_L, 6,2);
echo '';
QRcode::png($url,'text5.png', QR_ECLEVEL_L, 5,2);
echo '';
QRcode::png($url,'text4.png', QR_ECLEVEL_L, 4,2);
echo '';
QRcode::png($url,'text3.png', QR_ECLEVEL_L, 3,2);
echo ''

五、php二维码识别, 不需要第三方扩展

5.1、下载

链接

5.2、使用

include_once('./php-qr-decoder/lib/QrReader.php');
$qrcode = new QrReader('path/to_image');  //图片路径
$text = $qrcode->text(); //返回识别后的文本

//需要PHP >= 5.3 + GD Library

六、emojione & emojionearea

6.1、emojione

①、emojione 是什么

这是一款可以将 emoji 转为 Unicode 码进行存储,然后使用的时候转为 image 的插件

②、实践

下载我从官网压缩好的文件,运行 index.php 的即可看到神奇的事情。

  • 使用 $client->shortnameToUnicode 将手机端输入的 emoji 转为 unicode 码存储

  • 然后使用 $client->toImage 将 unicode 码转为 emoji 图片

下图是我在本地运行后的结果

https://file.lulublog.cn/images/3/2022/08/ye27xg72q8oIuaq7ZOyarzAa2GAna0.png

6.2、3种方法轻松处理php开发中emoji表情的问题

用5.1方式更友善

背景:做微信开发的时候就会发现,存储微信昵称必不可少。可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了。

一般Mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。这是怎么回事呢?

原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了。这要怎么办呢?我来介绍几种方法。

解决方案:

①、使用utf8mb4字符集

如果你的mysql版本>=5.5.3,你大可直接将utf8直接升级为utf8mb4字符集。这种4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储emoji表情,是最好的解决方案。至于字节增大带来的性能损耗,我看过一些评测,几乎是可以忽略不计的

②、使用base64编码

如果你因为某些原因无法使用utf8mb4的话,你还可以使用base64来曲线救国。使用例如base64_encode之类的函数编码过后的emoji可以直接存储在utf8字节集的数据表中,取出时decode一下即可。

③、干掉emoji表情

emoji表情是个麻烦的东西,即使你能存储,也不一定能完美显示。在iOS以外的平台上,例如PC或者android。如果你需要显示emoji,就得准备一大堆emoji图片并使用第三方前端类库才行。即便如此,还是可能因为emoji图片不够全而出现无法显示的情况在大多数业务场景下,emoji也不是非要不可的。我们可以适当地考虑干掉它,节约各种成本。

// 过滤掉emoji表情
function filterEmoji($str)
{
 $str = preg_replace_callback(
   "/./u",
   function (array $match) {
    return strlen($match[0]) >= 4 ? "" : $match[0];
   },
   $str);

  return $str;
 }

6.3、emojionearea

①、什么是 emojionearea

emojionearea.js 是一款可集成 EmojiOne 表情符号的 jQuery 文本编辑器插件

②、实践

下载我博主写的简易代码

下图是我在本地运行后的结果

https://file.lulublog.cn/images/3/2022/08/VW5zEHyYLI0nNf0mrtEUgw5U6uf6Nt.png

阅读 3068