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

巧了我就是萌 提交于 2019-12-08 10:44:57

问题


Following is the code snippet -

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

Wherein $campaign_image contains the url of third party images.

Problem

$campaign_image_width comes out empty for this url -

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

I am not sure if it is the limitation of getimagesize(), because of unsupported format, which is causing this, or it is because of accessibility issues with the image.

Note -

- The =h256-rw appeneded at the end seems to tell the server to return a different sized version of the image.

- I found that if I try to open the file using firefox browser, it does not display the image, but rather asks to download a webp file (an image format by google it seems). Google chrome opens the file and displays the image, normally.


回答1:


Since your server is already downloading the file you might as well do it yourself (if the problem is that it can't do it correctly for webp). You can easily do this using the GD methods 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);

Note: imagecreatefromwebp() was first introduced in PHP 5.5, so make sure your minimum version is 5.5 with the GD extension installed.

If possible you can install Google's own webp converter as a binary on your server:

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

In this instance you're running Amazon linux which is based on Fedora and hence uses yum as the package manager, so you should be able to run the following command:

sudo yum install libwebp;

Once you have installed this you can make sure that your safemode supports the binary by using safe_mode_exec_dir and one of the following execution methods:

  • exec
  • passthru
  • system
  • popen

Once you've run the conversion to eg. JPG, you can run the usual PHP tools to get the image dimensions:

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

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



回答2:


I think it's beacause of unsupported format. Try imagetypes to know what is supported.

$bits = imagetypes();

Check out this post, it can be helpful. After installing you'll be able to do

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


来源:https://stackoverflow.com/questions/35842807/getimagesize-unable-to-get-size-of-remote-webp-files-with-php-version-5-3-29

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!