Pimcore\Model\Asset\Image\Thumbnail\Config::getEstimatedDimensions PHP Method

getEstimatedDimensions() public method

public getEstimatedDimensions ( $asset )
    public function getEstimatedDimensions($asset)
    {
        $originalWidth = $asset->getWidth();
        $originalHeight = $asset->getHeight();
        $dimensions = [];
        $transformations = $this->getItems();
        if (is_array($transformations) && count($transformations) > 0) {
            if ($originalWidth && $originalHeight) {
                // this is the more accurate method than the other below
                $dimensions["width"] = $originalWidth;
                $dimensions["height"] = $originalHeight;
                foreach ($transformations as $transformation) {
                    if (!empty($transformation)) {
                        $arg = $transformation["arguments"];
                        if (in_array($transformation["method"], ["resize", "cover", "frame", "crop"])) {
                            $dimensions["width"] = $arg["width"];
                            $dimensions["height"] = $arg["height"];
                        } elseif ($transformation["method"] == "scaleByWidth") {
                            if ($arg["width"] <= $dimensions["width"] || $asset->isVectorGraphic()) {
                                $dimensions["height"] = round($arg["width"] / $dimensions["width"] * $dimensions["height"], 0);
                                $dimensions["width"] = $arg["width"];
                            }
                        } elseif ($transformation["method"] == "scaleByHeight") {
                            if ($arg["height"] < $dimensions["height"] || $asset->isVectorGraphic()) {
                                $dimensions["width"] = round($arg["height"] / $dimensions["height"] * $dimensions["width"], 0);
                                $dimensions["height"] = $arg["height"];
                            }
                        } elseif ($transformation["method"] == "contain") {
                            $x = $dimensions["width"] / $arg["width"];
                            $y = $dimensions["height"] / $arg["height"];
                            if ($x <= 1 && $y <= 1 && !$asset->isVectorGraphic()) {
                                continue;
                            }
                            if ($x > $y) {
                                $dimensions["height"] = round($arg["width"] / $dimensions["width"] * $dimensions["height"], 0);
                                $dimensions["width"] = $arg["width"];
                            } else {
                                $dimensions["width"] = round($arg["height"] / $dimensions["height"] * $dimensions["width"], 0);
                                $dimensions["height"] = $arg["height"];
                            }
                        } elseif ($transformation["method"] == "cropPercent") {
                            $dimensions["width"] = ceil($dimensions["width"] * ($arg["width"] / 100));
                            $dimensions["height"] = ceil($dimensions["height"] * ($arg["height"] / 100));
                        } elseif (in_array($transformation["method"], ["rotate", "trim"])) {
                            // unable to calculate dimensions -> return empty
                            return [];
                        }
                    }
                }
            } else {
                // this method is only if we don't have the source dimensions
                // this doesn't necessarily return both with & height
                // and is only a very rough estimate, you should avoid falling back to this functionality
                foreach ($transformations as $transformation) {
                    if (!empty($transformation)) {
                        if (is_array($transformation["arguments"]) && in_array($transformation["method"], ["resize", "scaleByWidth", "scaleByHeight", "cover", "frame"])) {
                            foreach ($transformation["arguments"] as $key => $value) {
                                if ($key == "width" || $key == "height") {
                                    $dimensions[$key] = $value;
                                }
                            }
                        }
                    }
                }
            }
        }
        // ensure we return int's, sometimes $arg[...] contain strings
        $dimensions["width"] = (int) $dimensions["width"];
        $dimensions["height"] = (int) $dimensions["height"];
        return $dimensions;
    }