我正在使用Silverstripe 4中的一个项目。在页面保存/发布中我想创建一个“MetaImage”,它由与页面关联的随机图块组成。
MetaImage由GD创建 - 然后我尝试将其保存到ORM中。这是一些示例代码:
public function onBeforeWrite()
{
$metaImage = imagecreatetruecolor(1200, 1200);
//GD image created here
$fileName = 'metaimage-'.$this->ID.'.jpeg';
$saveFolder = Folder::find_or_make('MetaImages');
imagejpeg($metaImage, 'assets/MetaImages/'. $fileName);
$metaObjectImage = new Image();
$metaObjectImage->ParentID = $saveFolder->ID;
$metaObjectImage->Filename = $fileName;
$metaObjectImage->write();
$this->MetaImage()->$metaObjectImage;
imagedestroy($metaImage);
parent::onBeforeWrite();
}
我得到的只是CMS的“文件”部分中的一个红色框,其中“无法找到文件”。
如何将创建的GD图像与$metaObjectImage
?
如果“metaimage-6.jpeg”已经存在,它如何替换为文件的新副本?
答案 0 :(得分:1)
这是我使用setFromLocalFile的解决方案:
$saveFolder = Folder::find_or_make('MetaImages');
$fileName = bin2hex(random_bytes(32)).'.jpeg';
$tmpFolder = 'assets/'.$saveFolder->Title;
imagejpeg($metaImage, $tmpFolder.'/'.$fileName);
$metaObjectImage = new Image();
$metaObjectImage->setFromLocalFile($tmpFolder.'/'.$fileName);
$metaObjectImage->ParentID = $saveFolder->ID;
$metaObjectImage->write();
$this->MetaImage()->$metaObjectImage;