/**
* TODO PHP 从网络上获取图片 并保存
* @param $imgFromUrl 图片的网络路径,支持本地。但是图片限制盗链的可能不行
* 本地举例:'Public/images/from.png'
* 网络图片示例:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1538199326261&di=1e0eec15686209c2d456d554690327c1&imgtype=0&src=http%3A%2F%2Fimg5.duitang.com%2Fuploads%2Fitem%2F201410%2F13%2F20141013110308_QtVC8.thumb.700_0.jpeg'
* @param $newFileName 此为重命名并进行保存的图片地址
* @return bool|string 如果$filename不为空,方可进行下载并返回新图片地址
*
* 使用 举例:
* $img = saveImageFromHttp('Public/images/from.png',"Public/images/save".time().".png");
* echo $img;
*/
function saveImageFromHttp($imgFromUrl,$newFileName) {
//如果$imgFromUrl地址为空,直接退出即可
if ($imgFromUrl == "") {return false;}
//如果没有指定新的文件名
if ($newFileName == "") {
//得到 $imgFromUrl 的图片格式
$ext = strrchr($imgFromUrl, ".");
//如果图片格式不为.gif 或者.jpg .png,直接退出即可
if ($ext != ".gif" && $ext != ".jpg" && $ext != 'png'){
return false;
}
$newFileName = date("dMYHis") . $ext;
//用天月面时分秒来命名新的文件名
}
ob_start();//打开输出
readfile($imgFromUrl);//输出图片文件
$img = ob_get_contents();//得到浏览器输出
ob_end_clean();//清除输出并关闭
//$size = strlen($img);//得到图片大小
$fp2 = @fopen($newFileName, "a");
fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名
fclose($fp2);
return $newFileName;//返回新的文件名
}
/**
* @return int
* 测试获取网络图片并保存到本地目录,保留原来文件名(可以用的 亲测有效)
*/
public function down_img($url)
{
// $url = 'https://resource3.9yuntu.cn/png/png_BgDOxShK06yR0c1taBiGt2_page1.png?Expires=1633785742&OSSAccessKeyId=LTAI5t8xfqu8wtYY9i7VckDy&Signature=wCbKtpgDSlDkwlLolGXoW7C2Las%3D';
$name = date("dMYHis");
$filename = $name.'.png';//文件名称生成
// date("dMYHis")
$time = date('Ymd', strtotime('now'));
$filepath = "attachment/images/data/". $time;//重新定义路径
//创建目录
$dir = iconv("UTF-8", "GBK", $filepath);
if (!file_exists($dir)){
mkdir ($dir,0777,true);
} else {
//文件已存在,修改权限
chmod($dir, 0777);
}
$state = @file_get_contents($url,0,null,0);//获取网络资源的字符内容
if($state){
ob_start();//打开输出
readfile($url);//输出图片文件
$img = ob_get_contents();//得到浏览器输出
ob_end_clean();//清除输出并关闭
$size = strlen($img);//得到图片大小
dump($size);
$fp2 = @fopen($filepath.'/'.$filename, "a");
fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名
fclose($fp2);
return $filepath.'/'.$filename;
}
else{
return 0;
}
}