2016-09-20 8 views
0

Image :: make($ url)を使用して、オリジナルのFacebook画像をFacebookのサイトからダウンロードしてトリミングし、元の画像と切り取った画像を保存するコードを作成しています。Laravel Intervention画像とFacebookの画像

問題は、コードが共有の投稿から画像を取得しようとしているときに発生します。 アップロードした画像のURLは次のようになります。「https://scontent.xx.fbcdn.net/v/t1.0-9/p720x720/xxxxxx_xxxxxx_xxxxxxx_n.jpg?oh=xxxxxx」 共有投稿の画像へのURLは「https://external.xx.fbcdn.net/safe_image.php?d=blablabla」のように見えますが、

external.xx.blablaリンクでImage :: make($ url)を実行しようとすると、「Unable to init from given binary data」がスローされます。

スローとエラーの同じリンクを使用してブラウザに貼り付け、画像を表示してからもう一度コードを実行すると、画像が切り抜かれて保存されます。私は何が起こっているのか分かりません。

実際にすべての外部画像を表示する必要がありますか?

答えて

0

make()は、イメージURL、バイナリ、またはbase64データなど、多くのソースを受け入れます。あなたの2番目のURLは.phpで終わるので、私はそれがライブラリを投げ捨てているかもしれないと思います。代わりに次のようなものを試してみてください。

$img = Image::make(file_get_contents('https://external.xx.fbcdn.net/safe_image.php?d=blablabla')); 
+0

を追加しました。しかし、私はIntervention例外をキャッチしようとしましたが、print_r($ e)を実行しました。私は、Facebookによると "サポートされていないブラウザ"を手に入れています。だから、おそらく私はImage :: make()を通してイメージを要求するときにユーザーエージェントを設定する方法がわかりませんが、おそらくユーザーエージェントと何か関係があります。 –

0

Facebookからのユーザーエージェントが問題だったようです。

私は

Image::make(file_get_contents($url)) 

Image::make($url); 

を変更し、私はその代わりに、それは今 "イメージソースが読めない" を返すことを入れた後

$options = array('http' => array('header' => "User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n")); 
$context = stream_context_create($options); 
$img = Image::make(file_get_contents($attachments->media->image->src, false, $context)); 
$img = Image::make(file_get_contents($url, false, $context))