Laravel Intervention Image и изображения Facebook

Я делаю код, который загружает исходные изображения Facebook с моего сайта Facebook, обрезает их и сохраняет как исходное, так и обрезанное изображение, используя Image::make( $url ).

Проблема возникает, когда код пытается получить изображение из общей публикации. 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".

Попытка запустить Image::make( $url ) по ссылке external.xx.blabla выдает «Невозможно выполнить инициализацию из заданных двоичных данных».

Самое странное в этом то, что если я возьму ту же ссылку, которая выдает и выдает ошибку, вставлю ее в свой браузер и просмотрю изображение, а затем снова запущу код, ну, тогда он обрежет и сохранит изображение. Я понятия не имею, что происходит.

Мне действительно нужно сначала просмотреть все внешние изображения, прежде чем он заработает?


person Jesper Andersen    schedule 20.09.2016    source источник


Ответы (2)


make() принимает множество источников, таких как URL-адреса изображений, двоичные данные или данные base64. Поскольку ваш второй URL-адрес заканчивается на .php, я думаю, что это может привести к отключению библиотеки. Вместо этого попробуйте что-то вроде этого:

$img = Image::make(file_get_contents('https://external.xx.fbcdn.net/safe_image.php?d=blablabla'));
person Tadas Paplauskas    schedule 20.09.2016
comment
После этого вместо этого он теперь возвращает источник изображения, не читаемый. Однако я попытался поймать исключение Intervention, а затем просто сделал для него print_r($e). Оказывается, я получаю браузер, не поддерживаемый facebook. Так что, вероятно, это может иметь какое-то отношение к пользовательскому агенту, хотя я не уверен, как установить пользовательский агент, когда я запрашиваю изображения через Image::make() - person Jesper Andersen; 20.09.2016

Похоже, User-Agent был проблемой Facebook.

Я изменился

Image::make( $url );

to

Image::make( file_get_contents( $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 ) )
person Jesper Andersen    schedule 20.09.2016