Imagick 将外部图像解释为 HTML
Imagick Interprets external image as HTML
我遇到的问题是,当从特定外部网站(不是所有网站)保存图像时,出现错误,图像被解释为 html 而不是另一种图像格式。
到目前为止,这个网站是我唯一遇到过这个问题的网站,但我确实需要找到解决方案。
Link 到图片:
http://www.nycvelo.com/bike-of-the-week-nicks-geekhouse-commuter/
要测试的图像:
http://www.nycvelo.com/wp-content/uploads/2013/10/Nicks-Geekhouse-7.jpg
第 86 行的代码:
$imageURL = 'http://www.nycvelo.com/wp-content/uploads/2013/10/Nicks-Geekhouse-7.jpg';
// Get image file from imagick
$ImagickImage = new Imagick($imageURL);
错误:
Fatal error: Uncaught exception 'ImagickException' with message 'no decode delegate for this image format `HTML' @ error/constitute.c/ReadImage/535' in uploader.php:86
Stack trace:
#0 uploader.php(86): Imagick->__construct('http://www.nycvelo.com/wp-content/uploads/2013/10/Nicks-Geekhouse-7.jpg')
据我所知,首先没有 "html" 代表,拥有一个也没有意义,所以也许这需要 ImageMagick/Imagick 之外的解决方案?
更新
我 运行 对文件进行了测试,以查看 headers 被发回的内容,这是我在使用 file_get_contents
.
后得到的结果
array(9) {
[0]=>
string(15) "HTTP/1.1 200 OK"
[1]=>
string(23) "Content-Type: text/html"
[2]=>
string(17) "Connection: close"
[3]=>
string(23) "Cache-Control: no-cache"
[4]=>
string(17) "Connection: close"
[5]=>
string(20) "Content-Length: 6195"
[6]=>
string(81) "X-Iinfo: 5-12048231-0 0CNN RT(1434509018550 6) q(1 -1 -1 -1) r(1 -1) B10(4,289,0)"
[7]=>
string(163) "Set-Cookie: visid_incap_264353=osbiSagORl2MGqb2cebUn9regFUAAAAAQUIPAAAAAAAUiLr5I31XtpMPuiNCWNQH; expires=Thu, 15 Jun 2017 13:43:05 GMT; path=/; Domain=.nycvelo.com"
[8]=>
string(118) "Set-Cookie: incap_ses_239_264353=XJXubnJwpRuBGVGGahpRA9regFUAAAAAbY2asXWHPVkKb5NEpRJyXg==; path=/; Domain=.nycvelo.com"
}
服务器可能将您的请求重定向到某处的某个 html 页面,请检查响应内容以了解是否属于这种情况。
我强烈建议不要使用 Imagick 从其他服务器下载图像。使用 CURL 或其他一些可以让您充分控制下载的库(包括能够看到重定向、不正确的内容类型等),然后在正确下载后使用 Imagick 处理图像。
来源 - 我是 Imagick 的维护者。
我遇到的问题是,当从特定外部网站(不是所有网站)保存图像时,出现错误,图像被解释为 html 而不是另一种图像格式。
到目前为止,这个网站是我唯一遇到过这个问题的网站,但我确实需要找到解决方案。
Link 到图片: http://www.nycvelo.com/bike-of-the-week-nicks-geekhouse-commuter/
要测试的图像: http://www.nycvelo.com/wp-content/uploads/2013/10/Nicks-Geekhouse-7.jpg
第 86 行的代码:
$imageURL = 'http://www.nycvelo.com/wp-content/uploads/2013/10/Nicks-Geekhouse-7.jpg';
// Get image file from imagick
$ImagickImage = new Imagick($imageURL);
错误:
Fatal error: Uncaught exception 'ImagickException' with message 'no decode delegate for this image format `HTML' @ error/constitute.c/ReadImage/535' in uploader.php:86
Stack trace:
#0 uploader.php(86): Imagick->__construct('http://www.nycvelo.com/wp-content/uploads/2013/10/Nicks-Geekhouse-7.jpg')
据我所知,首先没有 "html" 代表,拥有一个也没有意义,所以也许这需要 ImageMagick/Imagick 之外的解决方案?
更新
我 运行 对文件进行了测试,以查看 headers 被发回的内容,这是我在使用 file_get_contents
.
array(9) {
[0]=>
string(15) "HTTP/1.1 200 OK"
[1]=>
string(23) "Content-Type: text/html"
[2]=>
string(17) "Connection: close"
[3]=>
string(23) "Cache-Control: no-cache"
[4]=>
string(17) "Connection: close"
[5]=>
string(20) "Content-Length: 6195"
[6]=>
string(81) "X-Iinfo: 5-12048231-0 0CNN RT(1434509018550 6) q(1 -1 -1 -1) r(1 -1) B10(4,289,0)"
[7]=>
string(163) "Set-Cookie: visid_incap_264353=osbiSagORl2MGqb2cebUn9regFUAAAAAQUIPAAAAAAAUiLr5I31XtpMPuiNCWNQH; expires=Thu, 15 Jun 2017 13:43:05 GMT; path=/; Domain=.nycvelo.com"
[8]=>
string(118) "Set-Cookie: incap_ses_239_264353=XJXubnJwpRuBGVGGahpRA9regFUAAAAAbY2asXWHPVkKb5NEpRJyXg==; path=/; Domain=.nycvelo.com"
}
服务器可能将您的请求重定向到某处的某个 html 页面,请检查响应内容以了解是否属于这种情况。
我强烈建议不要使用 Imagick 从其他服务器下载图像。使用 CURL 或其他一些可以让您充分控制下载的库(包括能够看到重定向、不正确的内容类型等),然后在正确下载后使用 Imagick 处理图像。
来源 - 我是 Imagick 的维护者。