2015-10-21 53 views
0

我使用Laravel 5Embed包来获取外部链接的元数据。然后我使用Intervention Image包来操作链接的默认图像并将其保存在磁盘上。干预图像:不支持编码格式(png?v = 73d79a89bded&a)

一切正常,直到我尝试提交链接到StackOverflow的问题。然后,我得到这个错误

NotSupportedException异常在AbstractEncoder.php线149:(?PNG V = 73d79a89bded &一)

编码格式不支持。

在AbstractEncoder.php线

在AbstractEncoder->处理(对象(图像), 'PNG?V = 73d79a89bded &一个',NULL)>在AbstractDriver.php线77

在AbstractDriver - >编码(对象(图像), '?PNG v = 73d79a89bded &一个',NULL)在> Image.php线119

在图像 - >编码( '?PNG v = 73d79a89bded &一个',NULL) in Image.php line 139

在图像 - >保存( 'C:\ XAMPP \ htdocs中\ R2 \公共/图片/ rwSuGpEB.png V = 73d79a89bded &一')在PostsController.php线70

如何处理这个在Laravel和干预包?

如何从basename()中删除?v=73d79a89bded&a

这是PostsController

public function store(PostRequest $request) 
{ 
    if (Input::has('link')) { 
     $input['link'] = Input::get('link'); 
     $info = Embed::create($input['link']); 

     if ($info->image == null) { 
      $embed_data = ['text' => $info->description]; 
     } else if ($info->description == null) { 
      $embed_data = ['text' => '']; 
     } else { 
      $extension = pathinfo($info->image, PATHINFO_EXTENSION); 

      $newName = public_path() . '/images/' . str_random(8) . ".{$extension}"; 

      if (File::exists($newName)) { 
       $imageToken = substr(sha1(mt_rand()), 0, 5); 
       $newName = public_path() . '/images/' . str_random(8) . '-' . $imageToken . ".{$extension}"; 
      } 
      // This is line 70 
      $image = Image::make($info->image)->fit(70, 70)->save($newName); 
      $embed_data = ['text' => $info->description, 'image' => basename($newName)]; 
     } 

     Auth::user()->posts()->create(array_merge($request->all(), $embed_data)); 

     return redirect('/subreddit'); 
    } 
    Auth::user()->posts()->create($request->all()); 

    return redirect('/subreddit'); 
} 

回答

3

create()方法有一个查询字符串?v=73d79a89bded&a的,如果你的图像名结束。该查询字符串被错误地解释为图像文件扩展名的一部分。

在进一步处理之前删除该查询字符串。

UPDATE

假设$延长持有不必要的查询字符串

$orig = pathinfo($info->image, PATHINFO_EXTENSION); 
$extension = substr($orig, 0, strpos($orig, '?')); 
+0

我不是故意粗鲁,但我已经知道了。问题是,我该如何删除它?我可以使用'basename()'来获得文件名+扩展名。 – Halnex

+0

对不起,您的问题的原始版本并不清楚。在这种情况下,你可以大大缩短它。看到我更新的答案。 –

+0

是的,我为此道歉。那之后我更新了我的问题。谢谢你,解决了它。 – Halnex

1

它看起来像你接受一个URL,所以你应该使用parse_url第一:

$parts = parse_url($input['link']); 
$extension = pathinfo($parts['path'], PATHINFO_EXTENSION); 

我还会注意到,你应该使用DIRECTORY_SEPARATOR作为路径。