在具有透明背景的绘制文本上添加图案覆盖

Posted

技术标签:

【中文标题】在具有透明背景的绘制文本上添加图案覆盖【英文标题】:Add pattern overlay over drawn text with transparent background 【发布时间】:2013-05-12 11:17:48 【问题描述】:

我正在使用 ImageMagick 通过 php 从文本创建透明图像。

我想知道是否可以(以及如何)在生成的图像上添加图案叠加层。 这个想法是让背景保持透明并在文本上应用纹理:

实际结果:

想要的结果:

任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

使用ImagickDraw 创建一个“绘图”对象(就像一个图层),然后将其添加到您的图像上。这是一个例子:

// create canvas
$draw = new ImagickDraw();
$draw->setfont('/path/to/your/font.ttf');

// load your overlay image
$overlay = new Imagick('/path/to/your/pattern.png');

// define pattern
$draw->pushPattern('myOverlay', 0, 0,
   $overlay->getImageWidth(), $overlay->getImageHeight());

// fill canvas with the pattern (tile)
$draw->composite(Imagick::COMPOSITE_COPY, 0, 0,
   $overlay->getImageWidth(), $overlay->getImageHeight(), $overlay);

// destroy pattern
$draw->popPattern();   
$draw->setFillPatternURL('#myOverlay');

// put text
$draw->setFontSize(100);
$draw->annotation(0, 0, 'My TextImage');

// create your image (800x400)
$output = new Imagick();
$output->newimage(800, 400, 'transparent');

// this will center your canvas
$output->setGravity(Imagick::GRAVITY_CENTER);

// render canvas on this image
$output->drawImage($draw);

$output->setImageFormat('png');
header('Content-Type: image/png');
print $output;

如果您希望叠加层被拉伸以适合 800x600,则在合成时使用该尺寸而不是图案尺寸

【讨论】:

以上是关于在具有透明背景的绘制文本上添加图案覆盖的主要内容,如果未能解决你的问题,请参考以下文章

使用 WinAPI 创建具有透明背景的文本标签

iOS UIView 子类,将透明文本绘制到背景

透明叠加创建PNG

iOS UIView 子类将透明文本绘制到背景

使用透明背景的 GD 绘制文本

如何在相机ARKit上添加半透明背景