예제 #1
0
 /**
  * Creates a picture configuration.
  *
  * @param int|array|null $size
  *
  * @return array<PictureConfiguration,array>
  */
 private function createConfig($size)
 {
     if (!is_array($size)) {
         $size = [0, 0, $size];
     }
     $config = new PictureConfiguration();
     $attributes = [];
     if (!isset($size[2]) || !is_numeric($size[2])) {
         $resizeConfig = new ResizeConfiguration();
         if (isset($size[0]) && $size[0]) {
             $resizeConfig->setWidth($size[0]);
         }
         if (isset($size[1]) && $size[1]) {
             $resizeConfig->setHeight($size[1]);
         }
         if (isset($size[2]) && $size[2]) {
             $resizeConfig->setMode($size[2]);
         }
         $configItem = new PictureConfigurationItem();
         $configItem->setResizeConfig($resizeConfig);
         if ($this->defaultDensities) {
             $configItem->setDensities($this->defaultDensities);
         }
         $config->setSize($configItem);
         return [$config, $attributes];
     }
     /** @var ImageSizeModel $imageSizeModel */
     $imageSizeModel = $this->framework->getAdapter(ImageSizeModel::class);
     $imageSizes = $imageSizeModel->findByPk($size[2]);
     $config->setSize($this->createConfigItem($imageSizes));
     if ($imageSizes && $imageSizes->cssClass) {
         $attributes['class'] = $imageSizes->cssClass;
     }
     /** @var ImageSizeItemModel $imageSizeItemModel */
     $imageSizeItemModel = $this->framework->getAdapter(ImageSizeItemModel::class);
     $imageSizeItems = $imageSizeItemModel->findVisibleByPid($size[2], ['order' => 'sorting ASC']);
     if (null !== $imageSizeItems) {
         $configItems = [];
         foreach ($imageSizeItems as $imageSizeItem) {
             $configItems[] = $this->createConfigItem($imageSizeItem);
         }
         $config->setSizeItems($configItems);
     }
     return [$config, $attributes];
 }
예제 #2
0
 /**
  * Get the config for one picture source element
  *
  * @param Model|object $imageSize The image size or image size item model
  *
  * @return PictureConfigurationItem
  */
 protected function getConfigurationItem($imageSize)
 {
     $configItem = new PictureConfigurationItem();
     $resizeConfig = new ResizeConfiguration();
     $mode = $imageSize->resizeMode;
     if (substr_count($mode, '_') === 1) {
         $importantPart = $this->image->setImportantPart(null)->getImportantPart();
         $mode = explode('_', $mode);
         if ($mode[0] === 'left') {
             $importantPart['width'] = 1;
         } elseif ($mode[0] === 'right') {
             $importantPart['x'] = $importantPart['width'] - 1;
             $importantPart['width'] = 1;
         }
         if ($mode[1] === 'top') {
             $importantPart['height'] = 1;
         } elseif ($mode[1] === 'bottom') {
             $importantPart['y'] = $importantPart['height'] - 1;
             $importantPart['height'] = 1;
         }
         $this->image->setImportantPart($importantPart);
         $mode = ResizeConfiguration::MODE_CROP;
     }
     $resizeConfig->setWidth($imageSize->width)->setHeight($imageSize->height)->setZoomLevel($imageSize->zoom);
     if ($mode) {
         $resizeConfig->setMode($mode);
     }
     $configItem->setResizeConfig($resizeConfig);
     if (isset($imageSize->sizes)) {
         $configItem->setSizes($imageSize->sizes);
     }
     if (isset($imageSize->densities)) {
         $configItem->setDensities($imageSize->densities);
     }
     if (isset($imageSize->media)) {
         $configItem->setMedia($imageSize->media);
     }
     return $configItem;
 }