joey/pieced-img

文字和图片拼贴

v1.1 2019-06-13 07:43 UTC

This package is auto-updated.

Last update: 2024-09-13 21:04:01 UTC


README

环境要求

PHP >= 5.6
GD扩展

介绍

这是一个文字和图片拼接的类,常见的应用场景是生成分享海报。

安装

composer require joey/pieced-img

示例

   <?php
   namespace Joey\PiecedImg\example;
      
   use Joey\PiecedImg\drive\Img;
   use Joey\PiecedImg\drive\PiecedImg;
   use Joey\PiecedImg\drive\Text;
   
   //合成一个文字
   $font = __DIR__ . "/ttf/MSYH.TTC";//字体的路径这里要用绝对路径
   $nickname = Text::marginTop(20)//上边距20
   ->align(Text::ALIGN_CENTER)//水平居中
   ->vertical(Text::ALIGN_START)//垂直 向上
   ->build("袅袅", $font);
   
   //合成一个头像
   $avatar = Img::align(Img::ALIGN_CENTER)//水平居中
   ->vertical(Img::ALIGN_START)//垂直 向上
   ->margin(80)//上下左右边距30
   ->build("img/avatar.jpg");//需要合成照片的地址
   
   
   //输出到本地
    PiecedImg::backgroundImage("img/background.png")
          ->merge($nickname)//拼凑 昵称
          ->merge($avatar)//拼凑 头像
          ->writeSave('./uploads/poster.png');//输出到本地
   
   //输出到浏览器
   header("Content-type : image/png");
   PiecedImg::backgroundImage("img/background.png")
       ->merge($nickname)//拼凑 昵称
       ->merge($avatar)//拼凑 头像
       ->writeString();//输出到浏览器
   //die();如果浏览器一堆乱码,则加上这句

输出到浏览器的图片

使用说明

由于PiecedImg使用了魔术方法,因此对IDE的支持不是很友好。因此,列出所有方法,以免还需要查看源代码。


公共方法

  • margin(...$arg) // 参数有1个,则上下左右边距都是参数一;参数有2个,则上下边距和左右边距分别是参数一、参数二;参数有4个,则参数分别对应,上右下左边距
  • marginTop($arg1) // 上边距为$arg1
  • marginBottom($arg1) // 下边距为$arg1
  • marginRight($arg1) // 右边距为$arg1
  • marginLeft($arg1) // 左边距为$arg1
  • align($arg) // 水平排列,默认Text::ALIGN_START;Text::ALIGN_START左对齐,ALIGN_CENTER居中,ALIGN_END右对齐
  • vertical($arg) // 垂直排列,默认Text::ALIGN_START;Text::ALIGN_START上对齐,ALIGN_CENTER居中,ALIGN_END下对齐

图片生成器

  • opacity(...$arg) // 图片的透明度0-1;若0.5则为半透明
  • build($arg1) // 需要拼接的图片路径,最后调用

文字生成器

  • size($arg) // 文字大小,默认18
  • color($arg,$arg,$arg) // 文字的颜色,如0,0,0表示黑色,默认黑色
  • angle($arg,) // 文字的角度,默认0
  • build($arg1,$arg2) //$arg1:需要填写的文字,$arg2:字体的路径,需要绝对路径

生成图片

  • backgroundImage($arg) // 必须先静态调用,背景图
  • merge($arg) // 参数为图片生成器或者文字生成器,可调用多个,多个按照先后顺序合成
  • writeString() // 输出到浏览器
  • writeSave($arg1) // 输出到本地,$arg1表示存储的位置

注意事项

  • 所有类都需要先静态调用再链式操作,如Text::size(27)->build($text,$font);这样做的好处是,第一不要new一个类出来,第二每条链式的参数都互不影响。
  • 如果调用输出浏览器出现乱码,那么需要在结尾加上die();
  • 字体的路径需要绝对路径,可以是__DIR__."/相对路径";
  • 如果计算出来的元素坐标为负数,那么定位会初始化到0,0,比如元素比背景图大,尽量排除这种因素。

如果有BUG可以,发送邮箱liujunyi.coder@gmail.com,VX:ad19960906,发issues。