2

上传图像时如何调整图像大小?

存在即函数:$image->resizeByWidth(width)

它可以在哪里实现以调整上传的图像的大小?

如何将其添加到以下上传示例中:

class GalleryPage extends Page {

    private static $many_many = array(
        'GalleryImages' => 'Image'
    );

    function getCMSFields() {

        $fields = parent::getCMSFields();

        $fields->addFieldToTab(
            'Root.Upload', 
            $uploadField = new UploadField(
                $name = 'GalleryImages',
                $title = 'Upload one or more images (max 10 in total)'
            )  
        );
        $uploadField->setAllowedMaxFileNumber(10);

        return $fields;        
    }   

谢谢

4

3 回答 3

2

它由 CMS 自动完成。当您在模板中使用图像时,您会告诉它尺寸,并且会在您保存或发布后立即调整大小(如果尚未调整)

于 2013-11-11T01:07:47.197 回答
2

如果您担心 CMS 用户上传 RAW 文件(例如 5MB JPG)的磁盘空间,那么您实际上可以按照问题中的要求在上传时重新采样,然后根据需要在模板中进一步调整大小。

如果您使用的是 SilverStripe 2.4+,那么您可以使用这个ResampleUpload 扩展。它在上传时重新采样图像并删除原始图像。

如果您使用的是 SilverStripe 3+,那么您需要将上述扩展名更改为 extendDataExtension而不是DataObjectDecorator. 我自己没有在 SS3 下使用它,因此可能需要进行其他小的调整,但是看着它我看不到任何需要的更改,因为它正在修改SS 3 中的 Image 类中仍然存在的onAfterUpload和方法。onAfterWrite

于 2013-11-13T12:31:14.443 回答
0

如前所述,在 SS 3 中没有开箱即用的功能。这个 mod 提供了您正在寻找的解决方案:https ://github.com/heyday/silverstripe-optimisedimage

首先在root中安装mod。

然后在您的mysite/_config/config.yml中编写以下代码以激活图像重采样(调整大小)。

Image:
  extensions:
    - ResampleImage

在同一个 config.yml 文件中,写入最大分辨率(显然 x = 宽度,y = 高度)。如果用户上传更大的分辨率照片,它将按比例缩小(保持纵横比)以适应给定的最大分辨率尺寸。

ResampleImage:
  max_x: 2000
  max_y: 2000
于 2016-12-14T21:06:30.837 回答