0

我正在 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”已经存在,我怎样才能让它被文件的新副本替换?

4

1 回答 1

1

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;
于 2018-02-14T02:30:39.070 回答