getimagesize 无法使用 PHP 版本 5.3.29 获取远程 webp 文件的大小

getimagesize unable to get size of remote webp files with PHP version 5.3.29

以下是代码片段-

list($campaign_image_width, $campaign_image_height, $campaign_image_type, $campaign_image_attr)=getimagesize($campaign_image);

其中$campaign_image包含第三方图片url

问题

$campaign_image_width 为空 url -

https://lh3.googleusercontent.com/VRY0O_3L8VH2wxJSTiKPr72PeM5uhPPFEsHzzYdxenddpTI150M0TYpljnZisQaROR0=h256-rw

我不确定是否是 getimagesize() 的限制,因为不支持的格式导致了这种情况,或者是因为图像的可访问性问题。

注-

- 最后附加的 =h256-rw 似乎告诉服务器 return 不同尺寸的图像版本。

- 我发现如果我尝试使用 firefox 浏览器打开文件,它不会显示图像,而是要求下载一个 webp 文件(图像格式 google它似乎)。 Google chrome 打开文件并正常显示图像。

我认为这是因为格式不受支持。尝试 imagetypes 了解支持的内容。

$bits = imagetypes();

查看 this post,它会有所帮助。安装后你就可以做

$image = new Imagick($originalFilepath);
$origImageDimens = $image->getImageGeometry(); 
$origImgWidth = $origImageDimens['width']; 
$origImgHeight = $origImageDimens['height'];   

由于您的服务器已经在下载文件,您不妨自己下载(如果问题是它不能为 webp 正确下载)。您可以使用 GD 方法轻松地做到这一点 imagecreatefromwebp with imagesx and imagesy:

<?php

$url = 'https://lh3.googleusercontent.com/VRY0O_3L8VH2wxJSTiKPr72PeM5uhPPFEsHzzYdxenddpTI150M0TYpljnZisQaROR0=h256-rw';

$img = imagecreatefromwebp($url);

$width = imagesx($img);
$height = imagesy($img);

var_dump($width, $height);

注: imagecreatefromwebp() 首次在 PHP 5.5 中引入,因此请确保您的最低版本为 5.5 并安装了 GD 扩展。

如果可能,您可以在您的服务器上安装 Google 自己的 webp 转换器作为二进制文件:

https://developers.google.com/speed/webp/docs/compiling#building

在这种情况下,您运行正在使用基于 Fedora 的 Amazon linux,因此使用 yum 作为程序包管理器,因此您应该能够 运行 以下命令:

sudo yum install libwebp;

安装后,您可以使用 safe_mode_exec_dir 和以下执行方法之一来确保您的 safemode 支持二进制文件:

一旦您 运行 转换为例如。 JPG,您可以运行通常的PHP工具来获取图像尺寸:

$hnd = imagecreatefromjpeg('convertedImage.jpg');

$width = imagesx($hnd);
$height = imagesy($hnd);