如何从Laravel中的文本中提取base64图像?

时间:2020-10-19 06:44:25

标签: php laravel

如何从文本中提取base64图像?我尝试使用简单的html dom库,但无法从文本中提取它。我需要提取每个base64并将其转换为图像,然后将其保存到公用文件夹。

代码:

  $post = \App\Post::find(45);
    $dom = HtmlDomParser::str_get_html( $post->content );
    foreach ($dom->find('data:image') as $element) {
        dd($element);
    }
<p style="text-align:right"> Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to ma</p>

<p style="text-align:right">data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB .... == </p>

2 个答案:

答案 0 :(得分:0)

我认为这可能是重复的,具体取决于您是否要先将图像保存到服务器,请参阅Kerwin或linktoahref的回答

Laravel return image preview from base64

$image = imagecreatefromstring(base64_decode($results->getBase64Image()));
header('Content-type: image/png');
return imagejpeg($image);

答案 1 :(得分:0)

我的问题的解决方案是:

  1. 安装paquettg / php-html-parser软件包。
  2. 安装干预/图像。
  3. 使用以下代码:
use Illuminate\Support\Str;
use Intervention\Image\Facades\Image;
use PHPHtmlParser\Dom;

$posts = Post::where('content_edited',0)->orderBy('id','asc')->take(100)->get();

foreach ($posts as $post)
{
    $dom = new Dom;
    $dom->loadStr($post->content);
    $imgs = $dom->find('img');

    if ($imgs->count() > 0 )
    {

        $i =0 ;
        foreach ($imgs as $img)
        {

            $image_src = $img->src;
            $result = Str::contains($image_src, 'data:image');
            if ($result)
            {
                preg_match("/data:image\/(.*?);/", $image_src, $image_extension);
                $image_src = preg_replace('/data:image\/(.*?);base64,/', '', $image_src); // remove the type part
                $image_src = str_replace(' ', '_', $image_src);
                $imageName = 'image_' .$i.Factory::create()->uuid . '.' . $image_extension[1];
                Image::make(base64_decode($image_src))->save(public_path('/photos/inline/') . $imageName);
                $tag = $img->getTag();
                $tag->setAttribute('src','/photos/inline/'.$imageName);
                $post->content_edited = 1;

            }
            $i++;
        }
        $post->content_edited = 1;
        $post->content = $dom;
        $post->save();
    }else{

        $post->content_edited = 1;
        $post->save();
    }

}