0

我不确定这是一个错误,还是我的方法。我相信下面的示例应该显示一个红色正方形,上面几乎看不到(如果有的话)X。实际发生的是 X(由两条线组成)是完全不透明的。

<?php
$draw = new ImagickDraw();
$draw->setStrokeWidth(1);
$draw->setStrokeOpacity(0.1);
$draw->setStrokeColor("black");
$draw->line(0, 0, 500, 500);
$draw->line(500, 0, 0, 500);

$drawing = new Imagick();
$drawing->newImage(500, 500, "red");
$drawing->setImageFormat("png");
$drawing->drawImage($draw);

header("Content-Disposition: attachment; filename=test.png");
echo $drawing->getImageBlob();
?>
4

1 回答 1

1

有两个问题。

i) 您还需要为线条描边设置填充颜色,而不仅仅是描边颜色。以 1 像素的填充宽度绘制线条。

ii) 设置颜色会覆盖不透明度,因为颜色“黑色”的不透明度设置为完全不透明。切换命令的顺序,停止由 set color 命令更改的不透明度。

即 setStrokeOpacity 修改笔触颜色。它不会被批处理并修改绘图命令。

<?php

$draw = new ImagickDraw();
$draw->setStrokeWidth(1);

$draw->setStrokeColor("black");
$draw->setStrokeOpacity(0.1);

$draw->setFillColor('black');
$draw->setfillopacity(0.1);

$draw->line(0, 0, 500, 500);
$draw->line(500, 0, 0, 500);

$drawing = new Imagick();
$drawing->newImage(500, 500, "red");
$drawing->setImageFormat("png");
$drawing->drawImage($draw);

header("Content-Disposition: attachment; filename=test.png");
//header("Content-Type: image/png");
echo $drawing->getImageBlob();
于 2013-10-19T14:56:40.287 回答