Reputation: 4424
I am working on a project in Silverstripe 4. On page save/ publish I want to create a "MetaImage" which is made up of random tiles images associated with the page.
The MetaImage is created by GD - I'm then trying to save it into the ORM. Here's some example code:
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();
}
All I get is a red box in the "Files" section of the CMS with "File cannot be found".
How do I associate the created GD image with $metaObjectImage
?
How can I make it that if "metaimage-6.jpeg" already exists it's replaced by a new copy of the file?
Upvotes: 0
Views: 376
Reputation: 4424
This was my solution using 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;
Upvotes: 1