神奇的轮子之 - snappy
起因
- 因为项目中,需要将多张图片和文字进行拼接生成图片,一开始用GD库,果然难用,哈哈哈
- 经过不断的努力搜索,发现了神器wkhtmltoimage
- 原来可以先写好静态html,直接进行转换就好了
- 但是这个是一个shell脚本,php调用的话,已经有人写好了轮子 knplabs/knp-snappy【pdf和image统统不在话下】
安装
1
| composer require knplabs/knp-snappy
|
选择安装脚本,直接引用官方说明
wkhtmltopdf binary as composer dependencies
If you want to download wkhtmltopdf and wkhtmltoimage with composer you add to composer.json
:
1 2
| $ composer require h4cc/wkhtmltopdf-i386 0.12.x $ composer require h4cc/wkhtmltoimage-i386 0.12.x
|
or this if you are in 64 bit based system:
1 2
| $ composer require h4cc/wkhtmltopdf-amd64 0.12.x $ composer require h4cc/wkhtmltoimage-amd64 0.12.x
|
And then you can use it
我这里选择了
1
| composer require h4cc/wkhtmltoimage-amd64
|
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| <?php
require __DIR__ .'/vendor/autoload.php';
// 首先实例类,根据系统不同,选择不一样的脚本程序
$imageSnappy = new \Knp\Snappy\Image(__DIR__ . '/vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64');
// 如果有中文的话,需要添加中文字体 $ttf = __DIR__ . '/ttf/sc.ttf'; // 需要合成的图片地址,base64也可以的,其实跟这个也无关,主要是html能静态展示,那么合成的就是什么样的 $image_url = 'https://www.php.net/images/logos/php-logo.svg'; $name = 'wkhtmltoimage';
// html代码,随意搞了搞,真实使用的话,需要用心调整样式哦~ $htmlTemplate = <<<EOF <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>海报</title> </head> <style> @font-face { font-family: myFirstFont; src: url('{$ttf}'); }
body { font-family: myFirstFont; } </style> <body> <img src="{$image_url}"> <br> {$name} </body> </html> EOF;
$output = __DIR__ . '/demo/'.time().'.jpg'; $imageSnappy->generateFromHtml($htmlTemplate, $output);
echo 'ok';
|