[英]How to stop SilverStripe 4 from autogenerating image thumbnails on file upload?
我正在建立一個網站,其中包含很多大圖片,這些圖片將得到及時響應,以便手機可以看到該圖片的小版本,而4k顯示器則可以看到該圖片的大版本。 目的是允許SilverStripe中的作者上載可能最大為4000px x 3000px或更大的圖像,然后將其傳遞給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類,以為SilverStripe可能只嘗試在Images而不是File上生成縮略圖,但這不能解決問題。
有任何想法嗎?
您應該能夠使用class_for_file_extension
中的class_for_file_extension
覆蓋用於不同擴展名的類。 默認情況下,File類不會生成任何縮略圖,因此通過強制這些文件擴展名使用File類,您應該在上載圖像時跳過縮略圖的創建。
---
Name: myproject
---
SilverStripe\Assets\File:
class_for_file_extension:
'jpg': SilverStripe\Assets\File
'jpeg': SilverStripe\Assets\File
'png': SilverStripe\Assets\File
'gif': SilverStripe\Assets\File
'bmp': SilverStripe\Assets\File
'ico': SilverStripe\Assets\File
注意:由於SilverStripe如何處理這些字段的設置(合並),因此您將需要覆蓋所有默認圖像類型,而不僅僅是設置通配符。
例如https://github.com/silverstripe/silverstripe-assets/blob/1.0/src/File.php#L210
除了按照Brett的回答覆蓋用於圖像文件擴展名的類之外,還必須通過編輯站點yml文件來防止DBFile類強制重新采樣:
---
Name: myproject
---
SilverStripe\Assets\Storage\DBFile:
force_resample: false
僅將文件擴展名的類設置為文件而不是圖像,這是不夠的,因為DBFile會執行自己的“是圖像”檢查( https://github.com/silverstripe/silverstripe-assets/blob/1.0/src/Storage/ DBFile.php#L90 ),它會忽略您將文件擴展名設置為哪個類。
因此,即使DBFile確定基礎文件實際上是圖像,防止強制重新采樣( https://github.com/silverstripe/silverstripe-assets/blob/1.0/src/ImageManipulation.php#L282 )也會停止重新采樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.