在 Silverstripe ModelAdmin 中上传时调整图像大小

Resize images on upload in Silverstripe ModelAdmin

我是 Silverstripe 的新手,无法在文档或 SO 上找到我的问题的答案。

我将 Silverstripe 纯粹用作 CMS:没有网站作为前端。

我有最简单的 DataObject Product 和 ModelAdmin ProductAdmin 如下:

class Product extends DataObject
{

  private static $db = array(
    'Name' => 'Varchar',
    'Copy' => 'Text'
  );

  private static $has_one = array(
    'MyImage' => 'Image'
  );

}


class ProductAdmin extends ModelAdmin
{

  private static $managed_models = array(
    'Product'
  );

  private static $url_segment = 'product';

  private static $menu_title = 'Product';

}

/dev/build 之后,我的管理面板就建立好了,我可以像往常一样将高分辨率图片上传到 'Uploads' 目录。

我希望 CMS 在上传时 将图像重新采样为几种不同的尺寸,同时保留原始图像。新图像和原始图像也需要保存到 FlushGeneratedImagesTask 不会删除它们的位置。通过查看文档,我知道图像可以轻松调整大小,但我不清楚在哪里(或如何)添加所需的自定义功能。有人可以帮忙吗?

(我认为 Silverstripe 3.1 - resize image on upload 最接近回答这个问题,但是缺少一个步骤来说明如何让 CMS 使用 new/overridden 功能。)

我正在使用 Silverstripe 3.1 版

  1. 创建一个新的 class 扩展图像的 MyImage。
  2. 在您的 MyImage class 中创建一个函数 onBeforeWrite()
  3. 在此函数中,制作一个新图像$image = Image::create()。您可以在此处设置重采样图像的文件名、名称、标题、ParentID 等
  4. 使用 $image->SetWidth(...)
  5. 调整图片大小
  6. 更新数组 Product::$has_oneMyImage => MyImage