Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Imagick笔划显示在填充上方_Php_Imagemagick_Imagick - Fatal编程技术网

PHP Imagick笔划显示在填充上方

PHP Imagick笔划显示在填充上方,php,imagemagick,imagick,Php,Imagemagick,Imagick,试图做一个简单的水印组成的白色文本与黑色的轮廓上的图像。问题是笔划颜色出现在(或至少影响)填充颜色上。我所说的“影响”是指,例如,当我尝试一种红色笔划颜色时,填充颜色变为稍浅的红色(即红色+白色),因为我的填充颜色为白色 图像 代码: 我指定了.4不透明度来查看/显示填充和实体实际上在那里,只是没有完全按照我期望的方式 我希望填充颜色是100%白色,你知道为什么不是吗 多谢各位 编辑 我知道发生了什么。笔划宽度使其在内部与填充重叠。有没有办法确保填充颜色出现在笔划顶部,以便白色为100%白色

试图做一个简单的水印组成的白色文本与黑色的轮廓上的图像。问题是笔划颜色出现在(或至少影响)填充颜色上。我所说的“影响”是指,例如,当我尝试一种红色笔划颜色时,填充颜色变为稍浅的红色(即红色+白色),因为我的填充颜色为白色

图像

代码:

我指定了.4不透明度来查看/显示填充和实体实际上在那里,只是没有完全按照我期望的方式

我希望填充颜色是100%白色,你知道为什么不是吗

多谢各位


编辑


我知道发生了什么。笔划宽度使其在内部与填充重叠。有没有办法确保填充颜色出现在笔划顶部,以便白色为100%白色?

看起来笔划宽度为3时,点的大小太小了。您所体验的效果可以通过以下示例演示

foreach(范围(1,5)为$strokeWidth){
//…你的例子在这里。。。
$watermark_text->setStrokeWidth($strokeWidth);
$watermark_text->注释(0,0,'Font WITH'.$STROKEWITH);
}

最简单的解决方案是
克隆
您的
ImagickDraw
,并绘制两次相同的文本。第一个仅为大纲和填充,实际填充的文本位于第一个的顶部。如果不使用矢量,也可以放弃不透明度步骤,选择
rgba
color

//使用公共选项创建白色文本
$font='Helvetica Neue Bold';
$watermark_text=new ImagickDraw();
$watermark_text->setFillColor(“白色”);
$watermark_text->setFont($font);
$watermark_text->setFontSize(25);
$watermark_text->setStrokeAntialias(假);
$watermark_text->setStrokeColor('none');
$watermark_text->设置行程宽度(0);
$watermark\u text->setGravity(Imagick::GRAVITY\u东南);
//克隆并设置笔划属性
$watermark\u outline=克隆$watermark\u文本;
$watermark_outline->setFillColor('none');
$watermark_outline->setStrokeColor('rgba(0,0,0.4)');
$watermark_轮廓->设置行程宽度(3);
//设置两者的文本,并偏移一以匹配笔划宽度
$watermark_outline->annotation(0,0,“在顶部绘制”);
$watermark_text->注释(3,0,“在顶部绘制”);
//先画笔画,再画文字
$image=new Imagick();
$image->setSize(200,35);
$image->readImage('XC:LightGoldenrod');
$image->drawImage($watermark\u outline);
$image->drawImage($watermark\u text);
$image->writeImage('out.png');

请显示足够的代码来重现问题-您没有显示画布大小,也没有显示您实际写入文本的代码…@appl3s代码与您显示的图像不匹配,并且不完整。请你能改进你的问题吗?谢谢你的评论,很明显我在显示代码方面做得很差,这是我的错误@下面的emcconville正确诊断并解决了问题。非常感谢@emcconville,这就是问题所在,您的解决方案解决了问题。
$watermark_text = new ImagickDraw();
$watermark_text->setFont($font);
$watermark_text->setFontSize(25);
$watermark_text->setFillColor('white');
$watermark_text->setStrokeColor('#000000');
$watermark_text->setStrokeWidth(3);
$watermark_text->setStrokeOpacity(0.4);
$watermark_text->setStrokeAntialias(false);
$watermark_text->setGravity(Imagick::GRAVITY_SOUTHEAST);