nwtn\Respimg::rasterize PHP Method

rasterize() public static method

Uses phantomjs to save the SVG as a PNG image at the specified size.
public static rasterize ( string $file, string $dest, integer $columns, integer $rows )
$file string The path to the file that should be rasterized.
$dest string The path to the directory where the output PNG should be saved.
$columns integer The number of columns in the output image. 0 = maintain aspect ratio based on $rows.
$rows integer The number of rows in the output image. 0 = maintain aspect ratio based on $columns.
    public static function rasterize($file, $dest, $columns, $rows)
    {
        // check the input
        if (!file_exists($file)) {
            return false;
        }
        if (!file_exists($dest) || !is_dir($dest)) {
            return false;
        }
        // figure out the output width and height
        $svgTmp = new Respimg($file);
        $width = (double) $svgTmp->getImageWidth();
        $height = (double) $svgTmp->getImageHeight();
        $new_width = $columns;
        $new_height = $rows;
        $x_factor = $columns / $width;
        $y_factor = $rows / $height;
        if ($rows < 1) {
            $new_height = round($x_factor * $height);
        } elseif ($columns < 1) {
            $new_width = round($y_factor * $width);
        }
        // get the svg data
        $svgdata = file_get_contents($file);
        // figure out some path stuff
        $dest = rtrim($dest, '/');
        $filename = substr($file, strrpos($file, '/') + 1);
        $filename_base = substr($filename, 0, strrpos($filename, '.'));
        // setup the request
        $client = Client::getInstance();
        $serviceContainer = ServiceContainer::getInstance();
        $procedureLoaderFactory = $serviceContainer->get('procedure_loader_factory');
        $procedureLoader = $procedureLoaderFactory->createProcedureLoader(__DIR__);
        $client->getProcedureLoader()->addLoader($procedureLoader);
        $request = new RespimgCaptureRequest();
        $request->setType('svg2png');
        $request->setMethod('GET');
        $request->setSVG(base64_encode($svgdata));
        $request->setViewportSize($new_width, $new_height);
        $request->setRasterFile($dest . '/' . $filename_base . '-w' . $new_width . '.png');
        $request->setWidth($new_width);
        $request->setHeight($new_height);
        $response = $client->getMessageFactory()->createResponse();
        // send + return
        $client->send($request, $response);
        return true;
    }

Usage Example

Esempio n. 1
0
                $image->smartResize($w, 0, true);
                $image->writeImage($path_raster_o . '/' . $base . '-w' . $w . '.' . $ext);
                echo "OK\n";
            }
        }
    }
}
// rasterize SVGs
if ($dir = opendir($path_svg_i)) {
    while (($file = readdir($dir)) !== false) {
        $base = pathinfo($file, PATHINFO_BASENAME);
        $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
        if ($ext === 'svg') {
            foreach ($widths as $w) {
                echo 'Rasterizing ' . $file . ' to ' . $w . '…';
                Respimg::rasterize($path_svg_i . '/' . $file, $path_svg_o . '/', $w, 0);
                echo "OK\n";
            }
        }
    }
}
// copy SVGs
if ($dir = opendir($path_svg_i)) {
    while (($file = readdir($dir)) !== false) {
        $base = pathinfo($file, PATHINFO_BASENAME);
        $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
        if ($ext === 'svg') {
            echo 'Copying ' . $file . '…';
            copy($path_svg_i . '/' . $file, $path_svg_o . '/' . $file);
            echo "OK\n";
        }