从 URL 创建图像 任何文件类型
我知道imagecreatefromgif()
,imagecreatefromjpeg()
和imagecreatefrompng()
但是有没有办法从任何类型的有效图像的URL创建图像资源(最好是png)?还是必须确定文件类型,然后使用适当的函数?
当我说url时,我的意思是类似的东西,而不是数据URLhttp://sample.com/image.png
我知道imagecreatefromgif()
,imagecreatefromjpeg()
和imagecreatefrompng()
但是有没有办法从任何类型的有效图像的URL创建图像资源(最好是png)?还是必须确定文件类型,然后使用适当的函数?
当我说url时,我的意思是类似的东西,而不是数据URLhttp://sample.com/image.png
最简单的方法是让php决定什么是文件类型:
$image = imagecreatefromstring(file_get_contents($src));
$jpeg_image = imagecreatefromfile( 'photo.jpeg' );
$gif_image = imagecreatefromfile( 'clipart.gif' );
$png_image = imagecreatefromfile( 'transparent_checkerboard.PnG' );
$another_jpeg = imagecreatefromfile( 'picture.JPG' );
// This requires you to remove or rewrite file_exists check:
$jpeg_image = imagecreatefromfile( 'http://example.net/photo.jpeg' );
// SEE BELOW HO TO DO IT WHEN http:// ARGS IS NEEDED:
$jpeg_image = imagecreatefromfile( 'http://example.net/photo.jpeg?foo=hello&bar=world' );
function imagecreatefromfile( $filename ) {
if (!file_exists($filename)) {
throw new InvalidArgumentException('File "'.$filename.'" not found.');
}
switch ( strtolower( pathinfo( $filename, PATHINFO_EXTENSION ))) {
case 'jpeg':
case 'jpg':
return imagecreatefromjpeg($filename);
break;
case 'png':
return imagecreatefrompng($filename);
break;
case 'gif':
return imagecreatefromgif($filename);
break;
default:
throw new InvalidArgumentException('File "'.$filename.'" is not valid jpg, png or gif image.');
break;
}
}
switch
/* if (!file_exists($filename)) {
throw new InvalidArgumentException('File "'.$filename.'" not found.');
} <== This needs addiotional checks if using non local picture */
switch ( strtolower( array_pop( explode('.', substr($filename, 0, strpos($filename, '?'))))) ) {
case 'jpeg':
之后,您可以将其与以下功能一起使用:http://www.tld/image.jpg
$jpeg_image = imagecreatefromfile( 'http://example.net/photo.jpeg' );
$gif_image = imagecreatefromfile( 'http://www.example.com/art.gif?param=23&another=yes' );
正如您可以从官方的PHP手册function.imagecreatefromjpeg.php GD允许从function.fopen.php支持的URL加载图像,因此无需先获取图像并将其保存到文件,然后打开该文件。