Я хочу разместить элементы html в моем png, созданном с помощью Imagick.
Мой код на данный момент:
$out = "<table><tr><td>There will be data</td></tr></table>";
$draw = new \ImagickDraw();
$draw->setStrokeOpacity(1);
$draw->setStrokeColor("rgb(255,255,255)");
$draw->setFillColor('rgb(200, 200, 200)');
$draw->setStrokeWidth(2);
$draw->setFont("/var/www/myapp/public/fonts/calibri.ttf");
foreach ($sizes as $size) {
$draw->setFontSize($size);
$draw->annotation(50, (24 * 24 / 16), $out);
}
$imagick = new \Imagick();
$imagick->newImage(500, 500, 'rgb(0, 0, 0)');
$imagick->setImageFormat("png");
$imagick->drawImage($draw);
header("Content-Type: image/png");
echo $imagick->getImageBlob();
Но он отображает $out как строку, а не как таблицу.
Как отрендерить его в виде таблицы?






Я не думаю, что вы можете, вам нужно будет проверить исходный код функции, но, похоже, он принимает только строку в качестве аргумента.
http://php.net/manual/en/imagickdraw.annotation.phphttps://github.com/mkoppanen/imagick/blob/master/imagickdraw_class.c
Imagick не является средством визуализации HTML.
Если вам нужен снимок экрана страницы, я настоятельно рекомендую использовать Chrome в безголовом режиме, чтобы делать скриншоты, похожие на:
use Behat\Mink\Mink;
use Behat\Mink\Session;
use DMore\ChromeDriver\ChromeDriver;
function takeScreenshot($newsletterUrl, $newsletterFilename)
{
$chromeDriver = new ChromeDriver(CHROME_URI, null, $newsletterUrl);
$mink = new Mink([
'browser' => new Session($chromeDriver)
]);
$mink->setDefaultSessionName('browser');
$mink->getSession()->visit($newsletterUrl);
if ($mink->getSession()->getStatusCode() !== 200) {
throw new \Exception("something went wrong generating news letter. Check [$newsletterUrl] is working");
}
/** @var ChromeDriver $driver */
$driver = $mink->getSession()->getDriver();
@mkdir(dirname($newsletterFilename), 0755, true);
$driver->captureScreenshot($newsletterFilename);
}