2013-10-15 2 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(); 
Смежные вопросы