PHP 获取网络图片资源并保存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/82893958

☹ 背景:

  • 在进行后台图片资源整合时,我发现有需要获取网络图片的需要,简单的要求就是,先获取某个资源图片,然后由代 PHP 代码实现剪切水印等操作,最后进行上传服务器…

☺.框架 : ThinkPHP3.2.3 (越来越不想玩这个低版本了)

☺ 探索:

  • 首先,我所做提供的代码也是从道友们那里获得的,然后经过测试并完善备注,希望能对小白们有所帮助
  • 再者,个人发现,没有设置过防盗链的图片资源是可以获取的,要保证你的图片资源服务器是可以访问哦
  • 并且,测试发现,如果报错的图片重名,不生效,建议使用随机码或时间戳命名

☹ 源代码:

  • 具体参数解释及使用方法请看代码备注:
/**
 * 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;//返回新的文件名
}
  • 测试运行,实现效果截图:

☹ 补充:

  • 有的功能需求中,可以将图片上传后,再将原来的图片资源删掉即可,以减少资源你的浪费,可参考简单代码
/**
 * PHP 删除指定的图片
 * @param $filename 目标图片路径
 */
function deleteServerImg($filename)
{
    if (file_exists($filename)) { //检查图片文件是否存在
        $result = @unlink($filename);
       if ($result == true) {
            echo '删除成功';
        } else {
            echo '无法删除';
        }
    } else {
        echo '找不到图片文件';
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ryan Miao

如何启动一个本地静态服务器

背景 学习前端开发,想要调试静态页面以及js,发现直接本地打开会有跨域异常。因此,需要启动一个静态服务器,只负责当前目录的文件路由。 目前尝试了两种方式。一种是...

5786
来自专栏做全栈攻城狮

采用React+Ant Design组件化开发前端界面(一)

​ antd是基于less开发的,我们使用less可以方便的改变主题色等配置。

2923
来自专栏大前端开发

使用mpvue开发小程序教程(一)

前段时间,美团开源了mpvue这个项目,使得我们又多了一种用来开发小程序的框架选项。由于mpvue框架是完全基于Vue框架的(重写了其runtime和compi...

2215
来自专栏西枫里博客

宝塔面板下升级到PHP7.2,无法查看phpinfo的解决办法。

自从建站后没多久,就把PHP的版本升级到7了,后续有升级到7.2了,一直也没关注过phpinfo的信息,今天小伙伴在群里说我草,phpinfo都看不到,我大概想...

2052
来自专栏vue学习

webpack入门

前言:这两天在网上找了些视频和资料学习webpack,最后发现官网上的教程原来就写得很好,只是都是全英文的一开始不想去看。。。。今天认真看了下官网教程,然后总结...

2132
来自专栏王小雷

React-Native-Android-Studio整合开发+环境配置+官方实例

linux下React Native开发环境搭建,使用Android-studio工具进行React Native整合开发。 参考React Native的...

5269
来自专栏老马寒门IT

08Vue.js快速入门-Vue综合实战项目

8.1. 前置知识学习 npm 学习 官方文档 推荐资料 npm入门 npm介绍 需要了解的知识点 package.json 文件相关配置选项 ...

4317
来自专栏分享达人秀

熟悉Android Studio界面,开始装逼卖萌

通过前两期的学习,我们可以正确搭建好Android Studio的开发环境,也创建了HelloWorld工程并成功运行,那么本期就带你一起来了解这款强大...

3786
来自专栏Java学习123

fiddler2抓包工具使用图文教程

1.4K6
来自专栏Puppeteer学习

一步一步学Vue(八)

1522

扫码关注云+社区

领取腾讯云代金券