Некоторые события плагинов

Подготовка доп.полей (system):

public function onCustomFieldsPrepareDom($field, DOMElement $parent, Form $form)
	{
        $option = $this->app->input->getCmd('option', '');
        $view = $this->app->input->getCmd('view', '');
        $layout = $this->app->input->getCmd('layout', '');
        $id = $this->app->input->getInt('id', 0);

        $onContactEdit = $option == 'com_contact' && $view == 'contact' && $layout == 'edit';
        $onContentEdit = $option == 'com_content' && $view == 'article' && $layout == 'edit';
        $onEdit = $onContactEdit || $onContentEdit;
        
        // Для полей media дополняем путь к изображению ИДом владельца
        if($field->type == 'media' && $onEdit){
            if(!$id){
                $field->type = 'hidden';
                return;
            }
            $dir = $field->fieldparams->get('directory', '');
            $dir = empty($dir) ? $id : $dir.'/'.$id;
            if(!empty($field->fieldname)) $dir .= '/'.$field->fieldname;
            $path = JPATH_SITE.'/images/'.$dir;
            if(!file_exists($path)) mkdir($path, 0755, true);
            $field->fieldparams->set('directory', $dir);
            //~ echo '
'.print_r($field->fieldname,1).'
'; } }

Фиксирование размеров картинки с добавлением полей заданного цвета (content):

use Joomla\CMS\Image\Image;
public function onContentBeforeSave($context, $item, $isNew, $data = array())
	{
		if ($context == 'com_media.file')
		{
            $path = $this->app->input->getString('path', '');
            if(strpos($path, '/slide') === false) return;
            
            $color = hexdec(str_replace('#', '', '#FF9933'));
            $image = imagecreatefromstring($item->data);
            imagefill($image, 0, 0, $color);
            imagecolortransparent($image, $color);
            
            //~ $imgObject = new Image(imagecreatefromstring($item->data));
            $imgObject = new Image($image);

            $imgObject->resize(
                1200,
                900,
                false,
                Image::SCALE_FIT
            );

            $type = IMAGETYPE_JPEG;

            switch ($item->extension)
            {
                case 'gif':
                    $type = IMAGETYPE_GIF;
                    break;
                case 'png':
                    $type = IMAGETYPE_PNG;
            }

            ob_start();
            $imgObject->toFile(null, $type);
            $item->data = ob_get_contents();
            ob_end_clean();
        }

Это решение является расширением функционала плагина /plugins/media-action/resize/

Простое преобразование изображения под размер с добавлением полей белого цвета

                    $imgObject = new JImage($src_file);

                    $imgObject->resize(
                        $width,
                        $height,
                        false,
                        JImage::SCALE_FIT
                    );
                    $imgObject->filter('backgroundfill', array('color' => '#FFFFFF'));

                    $imgObject->toFile($dst_file);