从 URL 创建图像 任何文件类型

2022-08-30 16:47:16

我知道imagecreatefromgif()imagecreatefromjpeg()imagecreatefrompng()但是有没有办法从任何类型的有效图像的URL创建图像资源(最好是png)?还是必须确定文件类型,然后使用适当的函数?

当我说url时,我的意思是类似的东西,而不是数据URLhttp://sample.com/image.png


答案 1

最简单的方法是让php决定什么是文件类型:

$image = imagecreatefromstring(file_get_contents($src));

答案 2

也许你想要这个:

$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;
    }
}

通过对相同功能的一些小修改,就可以用于Web url: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加载图像,因此无需先获取图像并将其保存到文件,然后打开该文件。


推荐