用php-vips覆盖文本

时间:2019-03-14 13:59:48

标签: php vips

我正在尝试编写一个PHP函数,以使用php-vips库将文本覆盖到图像上。浏览文档,我找不到在libvips文档here中绘制文本的函数,而php-vips文档here却没有提供很多细节,似乎只是指导您使用libvips文档。我在一个php-vips问题(this)中找到了一个代码片段,但是它使用的文本函数在当前php-vips库中不存在。有谁知道是否可以用php-vips将文本绘制到图像上,如果可以,怎么做?作为参考,我的用例是在通过PDF下载时在照片上绘制照片的时间戳。

1 个答案:

答案 0 :(得分:1)

我为您制作了一个演示程序:

#!/usr/bin/php 
<?php
require __DIR__ . '/vendor/autoload.php';
use Jcupitt\Vips;

$image = Vips\Image::newFromFile($argv[1], ['access' => 'sequential']);

// this renders the text to a one-band image ... set width to the pixels across
// of the area we want to render to to have it break lines for you
$text = Vips\Image::text('Hello world!', [
  'font' => 'sans 120', 
  'width' => $image->width - 100
]);
// make a constant image the size of $text, but with every pixel red ... tag it
// as srgb
$red = $text->newFromImage([255, 0, 0])->copy(['interpretation' => 'srgb']);
// use the text mask as the alpha for the constant red image
$overlay = $red->bandjoin($text);

// composite the text on the image
$out = $image->composite($overlay, "over", ['x' => 100, 'y' => 100]);

$out->writeToFile($argv[2]);

我可以这样运行它:

$ ./render_text.php ~/pics/tiny_marble.jpg x.jpg

制作:

output image

文本方法的文档在这里:

https://libvips.github.io/php-vips/docs/classes/Jcupitt.Vips.ImageAutodoc.html#method_text

不幸的是,phpdoc标记不允许我们为这些选项生成文档。您需要在此处参考完整的libvips文档:

https://libvips.github.io/libvips/API/current/libvips-create.html#vips-text