代码之家  ›  专栏  ›  技术社区  ›  Feralheart

Imagick:绘制html输出

  •  0
  • Feralheart  · 技术社区  · 7 年前

    我想把html元素放在用Imagick创建的png上。

    目前我的代码:

    $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

    2 回复  |  直到 7 年前
        1
  •  1
  •   Danack    7 年前

    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);
    }
    
        2
  •  0
  •   Magnesium    7 年前

    我不认为你可以,你必须检查函数源代码,但它似乎只接受一个字符串作为参数。

    http://php.net/manual/en/imagickdraw.annotation.php https://github.com/mkoppanen/imagick/blob/master/imagickdraw_class.c