【问题标题】:Laravel Intervention Image and Facebook imagesLaravel 干预图像和 Facebook 图像
【发布时间】:2017-01-28 01:21:22
【问题描述】:

我正在编写一个代码,用于从我的 Facebook 网站下载原始 Facebook 图像,裁剪它们并使用 Image::make( $url ) 保存原始图像和裁剪后的图像。

代码尝试从共享帖子中获取图像时会出现问题。 我上传的图片的 URL 如下所示:“https://scontent.xx.fbcdn.net/v/t1.0-9/p720x720/xxxxxx_xxxxxx_xxxxxxx_n.jpg?oh=xxxxxx” 而来自共享帖子的图片网址如下所示:“https://external.xx.fbcdn.net/safe_image.php?d=blablabla”。

尝试在 external.xx.blabla 链接上运行 Image::make( $url ) 会抛出“无法从给定的二进制数据初始化”。

最奇怪的是,如果我使用相同的引发错误的链接,将其粘贴到我的浏览器并查看图像,然后再次运行代码,那么它会裁剪并保存图像。我不知道发生了什么。

我真的必须先查看所有外部图像才能工作吗?

【问题讨论】:

    标签: facebook image laravel intervention


    【解决方案1】:

    make() 接受许多来源,例如图像 url、二进制或 base64 数据。由于您的第二个 url 以 .php 结尾,我认为它可能会关闭库。尝试这样的事情:

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

    【讨论】:

    • 替换后,它现在返回“图像源不可读”。但是,我试图捕获干预异常,然后对其进行了 print_r($e) 。原来我得到了 facebook 的“浏览器不支持”。所以它可能与用户代理有关,虽然我不确定当我通过 Image::make() 请求图像时如何设置用户代理
    【解决方案2】:

    用户代理似乎是 Facebook 的问题。

    我变了

    Image::make( $url );
    

    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 ) )
    

    【讨论】:

      猜你喜欢
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多