在PHP中从URL保存透明图像

在PHP中从URL保存透明图像,php,gd,Php,Gd,我正在尝试构建一个类来执行许多照片操作,其中一个方法将从用户上传图像,但我还需要构建一个方法来从URL抓取照片,并在其上运行其他方法,就像使用用户的POST表单上传照片一样 下面是我从URL获取图像的函数的开始,它可以工作,但仍然需要工作。在代码下面,您可以看到运行此函数的结果图像。也就是原始图像,看看它应该是什么样子。您可以看到,此函数使图像在此透明图像上具有黑色背景。我怎样才能让它看起来更好 $url = 'http://a0.twimg.com/a/1262802780/images/tw

我正在尝试构建一个类来执行许多照片操作,其中一个方法将从用户上传图像,但我还需要构建一个方法来从URL抓取照片,并在其上运行其他方法,就像使用用户的POST表单上传照片一样

下面是我从URL获取图像的函数的开始,它可以工作,但仍然需要工作。在代码下面,您可以看到运行此函数的结果图像。也就是原始图像,看看它应该是什么样子。您可以看到,此函数使图像在此透明图像上具有黑色背景。我怎样才能让它看起来更好

$url = 'http://a0.twimg.com/a/1262802780/images/twitter_logo_header.png';

//run our function
savePhotofromURL($url, 'no');



// photo function should grab an photo from a URL
function savePhotofromURL($photo_url, $saveimage = 'yes'){
    if(isset($photo_url) && $photo_url != '') {

        //get info about photo
        $photo_info = getimagesize($photo_url);
        $source_width = $photo_info['0'];
        $source_height = $photo_info['1'];
        $source_type = $photo_info['mime'];

        //grab the Photo from URL
        $photo = imagecreatefromstring(file_get_contents($photo_url));

        if (is_resource($photo) === true){
            if($saveimage === 'yes'){
                // TO DO: resize image and make the thumbs code would go here if we are saving image:
                // TO DO: resize source image if it is wider then 800 pixels
                // TO DO: make 1 thumbnail that is 150 pixels wide
            }else{
                // We are not saving the image show it in the user's browser
                // TO DO: we will add in correct photo type soon
                header('Content-Type: image/gif');
                imagejpeg($photo, null, 100);
                imagedestroy($photo); 
            }
        }else{
            // not a valid resource, show error
            echo 'error getting URL photo from ' .$photo_url;
        }
    }else{
        // url of image was empty
        echo 'The URL was not passed into our function';
    }
}
结果如下所示

而不是像这样

以下两个调用将告诉php使用png图像中的alpha混合:

        ImageAlphaBlending($photo, false);
        ImageSaveAlpha($photo, true);
编辑:
我看到你也在以JPEG格式输出图像。JPEG不支持透明度,因此无论你做什么,最终都会得到不正确的背景颜色。另请参见此相关问题:

以下两个调用将告诉php使用png图像中的alpha混合:

        ImageAlphaBlending($photo, false);
        ImageSaveAlpha($photo, true);
编辑:
我看到你也在以JPEG格式输出图像。JPEG不支持透明度,因此无论你做什么,最终都会得到不正确的背景颜色。另请参见此相关问题:

您需要添加对图像类型的更好支持,并扩展其透明度


由于图像是透明的,我们可以知道它是GIF或PNG,但是您在使用
imagejpeg()
时发送GIF标题-JPEG不支持任何类型的透明度。但是如果是png,您可能还必须考虑其alpha trans或index透明度。

您需要添加对图像类型的更好支持,并扩展其透明度


由于图像是透明的,我们可以知道它是GIF或PNG,但是您在使用
imagejpeg()
时发送GIF标题-JPEG不支持任何类型的透明度。但是如果它是png,你可能还必须考虑它的alpha trans或index透明度。

是的,我计划在中添加它,我只是在发布之前添加了获取图像类型的功能,所以我没有添加代码来使用该数据。是的,我计划在中添加它,我只是在发布之前添加了获取图像类型的功能,所以我没有添加使用该数据的代码。是的,jpg输出只是我在玩,我将根据图像类型使其执行不同的操作,对于png图像,我将输出或另存为png图像。我试过了(照片,假的);和ImageSaveAlpha($photo,true);但即使输出为png,它似乎也不会改变任何东西jpg输出只是我在玩,我会根据图像类型让它做不同的事情,对于png图像,我会输出或另存为png图像。我试过了(照片,假的);和ImageSaveAlpha($photo,true);但即使输出为PNG,它似乎也不会改变任何东西