在我的Laravel应用程序中,我有一个textarea,它有一个文本编辑器,允许人们上传图像。我需要从文本中获取这些图像并将它们保存到服务器中。
以下代码适用于小图片,但现在我尝试的图片只有400k,并且会导致内存错误。
我尝试使用许多不同文章和帖子中的许多不同方法来抑制错误,但无济于事。关于如何让它停止抛出错误的任何建议?
// $body contains the contents of the POSTed textarea,
// which includes HTML and images
public function storeImages($body, $article)
{
$dom = new \DomDocument();
$dom->loadHtml($body, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$images = $dom->getElementsByTagName('img');
foreach($images as $img)
{
$src = $img->getAttribute('src');
// if the img source is 'data-url'
if(preg_match('/data:image/', $src))
{
preg_match('/data:image\/(?<mime>.*?)\;/', $src, $groups);
$mimetype = $groups['mime'];
$filename = uniqid().'.'.$mimetype;
$filepath = '/media/'.$article->id.'/'.$filename;
$image = Image::make($src)
->encode($mimetype, 100)
->resize(1024, null, function ($constraint) {
$constraint->aspectRatio();
})
->save(config('filesystems.disks.media.root').'/'.$article->id.'/'.$filename);
$img->removeAttribute('src');
$img->removeAttribute('style');
$img->removeAttribute('data-filename');
$img->setAttribute('src', $filepath);
$img->setAttribute('class', 'img-responsive');
$img->setAttribute('alt', '');
}
}
return $dom->saveHTML();
}