我正在尝试在PHP中创建一个函数,它允许我输入基本上任何URL,然后在其上运行一些函数,就像用户在我的服务器上上传一样。所以我会调整大小并制作一些缩略图,但我需要帮助才能使图像处于可以在其上运行其他代码的状态。此站点上的另一位用户帮助我开始使用ImageCreateFromString()和file_get_contents()
请注意这段代码缺少很多我知道的东西,我只是想让基本功能正常工作,然后我会添加所有安全措施
我使用这样的网址尝试了以下代码,并在我的脚本网址中添加了照片网址:
http://example.com/friendproject2/testing/photos/fromurl/?url=http://a0.twimg.com/a/1262802780/images/twitter_logo_header.png
但它没有显示任何内容,甚至没有出现错误
function getphotoURL($url){
if(isset($url) && $url != 'bad') {
$image = ImageCreateFromString(file_get_contents($url));
if (is_resource($image) === true){
echo 'The URL of the image we fetch is :' .$url. '<BR><BR>';
//show image
header('Content-Type: image/jpeg');
imagejpeg($image, null, 100);
imagedestroy($image);
imagedestroy($image);
// image is valid, do your magic here
}else{
// not a valid image, show error
echo 'error getting URL photo from ' .$url;
}
}else{
//url was empty
echo 'The URL was not passed into our function';
}
}
?>
######更新#####
这似乎是我的一个简单错误,简单的检查POST请求而不是GET请求,下面是我的新代码。
我有几个问题,
1)我使用的是imagejpeg($ image,null,100);我想知道,我应该使用其他东西吗?它是否需要源图像是jpg或它是否适用于任何图像?我需要允许主要类型(jpg,jpeg,gif,png)
2)与上述问题相同,但是当在屏幕上显示图像时,我将标题设置为:header('Content-Type:image / jpeg');它不应该是其他类型图像的jpg吗?
3)有没有办法可以确保传入的源网址是实际图片,如果不是图片就做我想做的事情,比如显示我自己的错误或做一旦检测到URL不是有效的图像URL
,我自己的代码<?PHP
// run our function
if(isset($_GET['url']) && $_GET['url'] != "") {
getphotoURL($_GET['url'],'no');
}
function getphotoURL($url, $saveimage = 'yes'){
if(isset($url) && $url != '') {
$image = imagecreatefromstring(file_get_contents($url));
if (is_resource($image) === true){
if($saveimage === 'yes'){
// resize image and make the thumbs code would go here if we are saving image:
// resize source image if it is wider then 800 pixels
// make 1 thumbnail that is 150 pixels wide
}else{
// We are not saving the image show it in the user's browser
header('Content-Type: image/png');
imagejpeg($image, null, 100);
imagedestroy($image);
}
}else{
// not a valid resource, show error
echo 'error getting URL photo from ' .$url;
}
}else{
// url of image was empty
echo 'The URL was not passed into our function';
}
}
?>
答案 0 :(得分:4)
为PNG或GIF(透明度)调用imagecreatefromstring()后
对图像进行以下操作:
imagealphablending($image, true); // setting alpha blending on
imagesavealpha($image, true);
将平坦的黑色背景变为Alpha通道。
答案 1 :(得分:0)
回答您的新问题:
1)我正在使用imagejpeg($ image,null, 100);我想知道,我应该 用别的东西?它需要吗? 源图像是jpg或将 它适用于任何图像?我需要 允许主要类型(jpg,jpeg,gif, PNG)
嗯,php.net说,“imagejpeg()从给定的图像创建一个JPEG文件”。但重要的是这个,“一个图像资源,由图像创建函数之一返回,如imagecreatetruecolor()。”。并且您使用“imagecreatefromstring()返回一个图像标识符,表示从给定数据中获取的图像。如果您的PHP版本支持它们,将自动检测这些类型:JPEG,PNG,GIF,WBMP和GD2。” 所以,那应该没问题。
2)与上述问题相同但是何时 我在屏幕上显示图像 标头设置为: 标题('Content-Type:image / jpeg'); 如果不是其他类型的jpg 图象?
标题应为jpg类型 - 如果这是文件类型,那么你是正确的。
3)有没有办法让我确定 传入的源URL是一个 实际的形象,做任何我想做的事情 它不是一个图像,就像展示我自己的一样 一旦检测到错误或执行我自己的代码 该URL不是有效的图片网址
是的 - 而不是做:
$image = ImageCreateFromString(file_get_contents($url));
你可以这样做:
$image = imagecreatefromjpeg($url);
if (!$image) echo "error";
imagecreatefromjpeg()返回一个图像 表示图像的标识符 从给定的文件名中获取。
但实际上,你所拥有的一切都很好。
是否显示错误消息
echo 'The URL was not passed into our function';
或者什么都没有?
如果显示错误消息,可能检查===失败:
将返回图像资源 成功。如果是,则返回FALSE 图像类型不受支持,数据是 不是公认的格式,或者 图像已损坏且无法加载。
此外,您是否在开发服务器上记录了最大错误?这样你可以看到任何可能的警告被抛出?