diff --git a/src/Rasterization/Renderers/SVGEllipseRenderer.php b/src/Rasterization/Renderers/SVGEllipseRenderer.php index c4ebff0..393c5ff 100644 --- a/src/Rasterization/Renderers/SVGEllipseRenderer.php +++ b/src/Rasterization/Renderers/SVGEllipseRenderer.php @@ -18,10 +18,10 @@ class SVGEllipseRenderer extends SVGRenderer protected function prepareRenderParams(SVGRasterizer $rasterizer, array $options) { return array( - 'cx' => $options['cx'] * $rasterizer->getScaleX(), - 'cy' => $options['cy'] * $rasterizer->getScaleY(), - 'width' => $options['rx'] * 2 * $rasterizer->getScaleX(), - 'height' => $options['ry'] * 2 * $rasterizer->getScaleY(), + 'cx' => self::prepareLengthX($options['cx'], $rasterizer), + 'cy' => self::prepareLengthY($options['cy'], $rasterizer), + 'width' => self::prepareLengthX($options['rx'], $rasterizer) * 2, + 'height' => self::prepareLengthY($options['ry'], $rasterizer) * 2, ); } diff --git a/src/Rasterization/Renderers/SVGLineRenderer.php b/src/Rasterization/Renderers/SVGLineRenderer.php index b3b7ad5..e75dc62 100644 --- a/src/Rasterization/Renderers/SVGLineRenderer.php +++ b/src/Rasterization/Renderers/SVGLineRenderer.php @@ -18,10 +18,10 @@ class SVGLineRenderer extends SVGRenderer protected function prepareRenderParams(SVGRasterizer $rasterizer, array $options) { return array( - 'x1' => $options['x1'] * $rasterizer->getScaleX(), - 'y1' => $options['y1'] * $rasterizer->getScaleY(), - 'x2' => $options['x2'] * $rasterizer->getScaleX(), - 'y2' => $options['y2'] * $rasterizer->getScaleY(), + 'x1' => self::prepareLengthX($options['x1'], $rasterizer), + 'y1' => self::prepareLengthY($options['y1'], $rasterizer), + 'x2' => self::prepareLengthX($options['x2'], $rasterizer), + 'y2' => self::prepareLengthY($options['y2'], $rasterizer), ); } diff --git a/src/Rasterization/Renderers/SVGRectRenderer.php b/src/Rasterization/Renderers/SVGRectRenderer.php index 17d1d06..e1b3f71 100644 --- a/src/Rasterization/Renderers/SVGRectRenderer.php +++ b/src/Rasterization/Renderers/SVGRectRenderer.php @@ -17,10 +17,10 @@ class SVGRectRenderer extends SVGRenderer { protected function prepareRenderParams(SVGRasterizer $rasterizer, array $options) { - $x1 = $options['x'] * $rasterizer->getScaleX(); - $y1 = $options['y'] * $rasterizer->getScaleY(); - $w = $options['width'] * $rasterizer->getScaleX(); - $h = $options['height'] * $rasterizer->getScaleY(); + $x1 = self::prepareLengthX($options['x'], $rasterizer); + $y1 = self::prepareLengthY($options['y'], $rasterizer); + $w = self::prepareLengthX($options['width'], $rasterizer); + $h = self::prepareLengthY($options['height'], $rasterizer); return array( 'x1' => $x1, diff --git a/src/Rasterization/Renderers/SVGRenderer.php b/src/Rasterization/Renderers/SVGRenderer.php index cbfd212..eca53cf 100644 --- a/src/Rasterization/Renderers/SVGRenderer.php +++ b/src/Rasterization/Renderers/SVGRenderer.php @@ -53,7 +53,7 @@ public function render(SVGRasterizer $rasterizer, array $options, SVGNode $conte if (isset($stroke) && $stroke !== 'none') { $stroke = self::prepareColor($stroke, $context); $strokeWidth = $context->getComputedStyle('stroke-width'); - $strokeWidth = self::prepareLength($strokeWidth, $rasterizer); + $strokeWidth = self::prepareLengthX($strokeWidth, $rasterizer); $this->renderStroke($image, $params, $stroke, $strokeWidth); } @@ -128,19 +128,35 @@ private static function calculateTotalOpacity(SVGNode $node) /** - * Parses the length string and multiplies it with the rasterizer's scale. + * Parses the length string in relation to the rasterizer's X dimension. * - * @param string $len The CSS length string. - * @param SVGRasterizer $rasterizer The rasterizer for scaling the length. + * @param string $len The CSS length string. + * @param SVGRasterizer $ras The rasterizer for scaling the length. * * @return float The parsed and scaled length, in pixels. */ - private static function prepareLength($len, SVGRasterizer $rasterizer) + protected static function prepareLengthX($len, SVGRasterizer $ras) { - $docWidth = $rasterizer->getDocumentWidth(); - $scaleX = $rasterizer->getScaleX(); + $doc = $ras->getDocumentWidth(); + $scale = $ras->getScaleX(); - return SVG::convertUnit($len, $docWidth) * $scaleX; + return SVG::convertUnit($len, $doc) * $scale; + } + + /** + * Parses the length string in relation to the rasterizer's Y dimension. + * + * @param string $len The CSS length string. + * @param SVGRasterizer $ras The rasterizer for scaling the length. + * + * @return float The parsed and scaled length, in pixels. + */ + protected static function prepareLengthY($len, SVGRasterizer $ras) + { + $doc = $ras->getDocumentWidth(); + $scale = $ras->getScaleY(); + + return SVG::convertUnit($len, $doc) * $scale; } diff --git a/src/SVG.php b/src/SVG.php index e0417ff..33e226a 100644 --- a/src/SVG.php +++ b/src/SVG.php @@ -36,7 +36,7 @@ public static function convertUnit($unit, $viewLength) } $num = floatval($matches[1]); - $unit = $matches[2]; + $unit = isset($matches[2]) ? $matches[2] : null; if ($unit === 'px' || $unit === null) { return $num;