2013-10-15 48 views
0

我不知道这是一个错误还是我的方法。我相信下面的例子应该显示一个红色正方形,并且在它上面几乎看不见(如果有的话)X.实际发生的事情是X(由两条线组成)完全不透明。不能让ImagickDraw setStrokeOpactiy工作

<?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(); 
?> 

回答

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();