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;

		}