Joomla onContentBeforeSave - 调整图像大小

Joomla onContentBeforeSave - resize image

我想为 Joomla 3 创建一个插件,当登录用户在媒体管理器中上传图像时,它会自动调整图像大小。

到目前为止我尝试了什么:

<?php

defined('_JEXEC') or die('Restricted access');

class PlgSystemEasyImageResizer extends JPlugin
{
    protected $allowedMimeTypes = array('image/jpeg', 'image/png', 'image/gif');


    public function onContentBeforeSave($context, $article, $isNew)
    {
        if ($context == 'com_media.file') {
            JFactory::getApplication()->enqueueMessage('MY MESSAGE');

            JFactory::getApplication()->enqueueMessage(strval($article));
            JFactory::getApplication()->enqueueMessage(var_dump($article->tmp_name));
            JFactory::getApplication()->enqueueMessage(var_dump($article->path));
            JFactory::getApplication()->enqueueMessage(var_dump($article->type));
        }
        return true;
    }
}

但是上传后我只收到以下消息:

MY MESSAGE
Joomla\CMS\Object\CMSObject
Fertig hochgeladen: /AAAAAAAAA.jpg

如何从此对象获取图像并调整其大小? (我想使用本机 php 功能)。

我如何return 应该保存调整大小的图像?

您可以看看以下两种解决方案之一:

  1. 'Easy Image Resizer' 一个可以做你想做的事情的插件 https://extensions.joomla.org/extension/eir-easy-image-resizer/

  2. 'Quantum Manager' 一个新组件,用于替换和扩展您所知道的标准 mediamanager。从调整大小到修改的大量功能 https://extensions.joomla.org/extension/quantum-manager/

我是这样解决问题的: 挂钩 afterSave 事件并在保存后编辑图像。

    public function onContentAfterSave($context, $article, $isNew)
    {
        if ($context == 'com_media.file') {
            // JFactory::getApplication()->enqueueMessage('Filepath: ' . $article->filepath);
            if ($article->type == 'image/jpeg' or $article->type == 'image/png') {
                $orig_image = new JImage($article->filepath);
                // 750 will be set accordind to image ratio depending on 1000
                $resized_image = $orig_image->resize(1000, 750, true, JImage::SCALE_INSIDE);
                $resized_image->toFile($article->filepath);
            }
        }
    }