我正在建立一个网站,其中包含大量要响应式提供的大图像,以便手机可以看到该图像的小版本,而 4k 显示器可以看到该图像的大版本。其目的是允许 SilverStripe 中的作者上传大小为 4000 像素 x 3000 像素甚至更大的图像,然后将其传递给imgix之类的服务,以完成图像大小调整和压缩的繁重工作,以提供服务在主题中响应地提升图像。
但是,在大多数托管环境中上传这种大小的图像会导致 PHP 内存错误,这是因为 SilverStripe 会自动处理图像并为管理界面生成一些缩略图。我想禁用该缩略图生成,以便上传图像 - 全尺寸 - 并且在整个过程中不受操纵,以免服务器上的图像操作可能导致 PHP 内存错误。
我在 SilverStripe 的功能中看到的可能禁用图像缩略图生成的最接近的事情是在ImageManipulation特征中,但我无法在我的代码中连接如何利用它的点:
<?php
namespace MyProject;
use SilverStripe\ORM\DataObject;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TabSet;
use SilverStripe\Assets\File;
use SilverStripe\AssetAdmin\Forms\UploadField;
use Page;
class Project extends DataObject
{
private static $has_one = [
'Photo' => File::class
];
private static $owns = [
'Photo'
];
public function getCMSfields()
{
$fields = FieldList::create(TabSet::create('Root'));
$fields->addFieldsToTab('Root.Presentation', [
$photoUpload = UploadField::create('Photo', 'Photo')
]);
$photoUpload->getValidator()->setAllowedExtensions(array(
'png','jpeg','jpg'
));
$photoUpload->setFolderName('photos');
return $fields;
}
}
我尝试使用 File 类而不是 Image 类作为我的 Photo 字段,认为 SilverStripe 可能只尝试在图像而不是文件上生成缩略图,但这并不能解决问题。
有任何想法吗?