如何将GD创建的图像保存到Silverstripe 4

时间:2018-02-13 23:30:11

标签: gd silverstripe silverstripe-4

我正在使用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”已经存在,它如何替换为文件的新副本?

1 个答案:

答案 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;