当前位置:

首页 > 编程开发 > 使用 PHP 将 URL 中的图像保存

使用 PHP 将 URL 中的图像保存

本文介绍了在PHP中从URL保存图像的五种方法。这些方法将使用file_put_contents()、copy()、fopen()、fread()、fwrite()和gzdecode()等函数。在php中使用file_get_contents()和file_put_contents()从URL保存图像PHPfile_get_contents()会将文件读入字符串,而file_put_contents()可以将该字符串写入文件。结合这两个功能可以让您从URL保存图像。首先,使用file_get_conten

本文目录

    本文介绍了在 PHP 中从 URL 保存图像的五种方法。 这些方法将使用 file_put_contents()、copy()、fopen()、fread()、fwrite() 和 gzdecode() 等函数。


    在 php 中使用 file_get_contents() 和 file_put_contents() 从 URL 保存图像

    PHP file_get_contents() 会将文件读入字符串,而 file_put_contents() 可以将该字符串写入文件。 结合这两个功能可以让您从 URL 保存图像。

    首先,使用 file_get_contents() 将 URL 中的图像转换为字符串,然后使用 file_put_contents() 将此字符串保存到文件中。 结果将是 URL 中图像的副本。

    在下文中,我们使用 file_get_contents() 和 file_put_contents() 从 Imgur 保存图像。 此外,我们将图像重命名为 01_computer_image.png,但您可以使用其他名称和有效的图像扩展名。

    
    
    // The image is from Unsplash, and we've uploaded
    // it to Imgur for this article.
    $image_url = 'https://i.imgur.com/NFyDQtj.jpeg';
    // Define the image location. Here, the location
    // is the saved_images folder.
    $image_location = 'saved_images/01_computer_image.png';
    // Use file_put_contents to grab the image from
    // the URL and place it into the image location
    // with its new name.
    if (file_put_contents($image_location, file_get_contents($image_url))) {
    echo "Image saved successfully";
    } else {
    echo "An error code, please check your code.";
    }
    ?>
    

    输出结果如下:

    在 PHP 中从 URL 保存图像


    使用 cURL 从 URL 保存图像

    cURL 是使用网络协议传输数据的命令行工具。 由于图像存在于服务器的 URL 中,您可以启动 cURL 会话,将副本保存到您的计算机。

    在下文中,我们有一个 cURL 会话,它将保存来自 Imgur URL 的图像。

    
    
    // Initiate a cURL request to the image, and
    // define its location.
    $curl_handler = curl_init('Https://i.imgur.com/ZgpqSGm.jpeg');
    $image_location = 'saved_images/02_apples.png';
    // Open the file for writing in binary mode
    $open_image_in_binary = fopen($image_location, 'wb');
    // Define where cURL should save the image.
    curl_setopt($curl_handler, CURLOPT_FILE, $open_image_in_binary);
    curl_setopt($curl_handler, CURLOPT_HEADER, 0);
    // Lets you use this script when there is
    // redirect on the server.
    curl_setopt($curl_handler, CURLOPT_FOLLOWLOCATION, true);
    // Auto detect encoding for the response | identity
    // deflation and gzip
    curl_setopt($curl_handler, CURLOPT_ENCODING, '');
    // Execute the current cURL session.
    curl_exec($curl_handler);
    // Close the connection and
    curl_close($curl_handler);
    // Close the file pointer
    fclose($open_image_in_binary);
    
    // Confirm thenew image exists in the saved_images
    // folder.
    if (file_exists($image_location)) {
    echo "Image saved successfully";
    } else {
    echo "An error occurred. Please check your code";
    }
    ?>
    

    输出结果:

    使用 cURL 从 URL 保存图像


    使用 PHP 中的 copy() 函数从 URL 保存图像

    PHP copy() 函数可以将资源从一个位置复制到另一个位置。 要从 URL 保存图像,请为 copy() 提供 URL 和新位置。

    为确保您拥有图像,请使用 file_exists() 检查其是否存在。

    
    
    $image_url = 'https://i.imgur.com/CcicAAl.jpeg';
    $image_location = 'saved_images/03_robot.png';
    // Use the copy() function to copy the image from
    // its Imgur URL to a new file name in the
    // saved_images folder.
    $copy_image = copy($image_url, $image_location);
    // Confirm thenew image exists in the saved_images
    // folder.
    if (file_exists($image_location)) {
    echo "Image saved successfully";
    } else {
    echo "An error occurred. Please check your code";
    }
    ?>
    

    输出结果如下:

    使用 PHP copy() 函数保存图像


    在 PHP 中使用 fread() 和 fwrite() 从 URL 保存图像

    PHP fread() 将读取打开的文件,而 fwrite() 将写入打开的文件。 知道了这一点,你可以使用 fopen() 打开图像 URL,使用 fread() 读取图像,然后你可以使用 fwrite() 保存它。

    这听起来比看起来要复杂一些。 这就是为什么我们创建了一个函数来简化流程。

    该功能以下列方式工作:

    1. 使用 fopen() 以读取二进制模式打开图像。
    2. 使用 fopen() 在写入二进制模式下打开图像位置。
    3. 使用 fread() 读取图像。
    4. 将图像写入图像位置。
    5. 关闭打开的图像的句柄。
    6. 关闭图像位置的句柄。

    我们已经使用此功能来保存 Mac 的图片。

    
    
    // Define a custom function to grab an image
    // from a URL using fopen and fread.
    function save_image_from_URL($source, $destination) {
    $image_source = fopen($source, "rb");
    $image_location = fopen($destination, "wb");
    
    while ($read_file = fread($image_source, 8192)) {
    fwrite($image_location, $read_file, 8192);
    }
    fclose($image_source);
    fclose($image_location);
    }
    // Set the image URL and its new destination on
    // your system
    $image_url = 'https://i.imgur.com/XGSex5B.jpeg';
    $image_location = 'saved_images/04_Mac.png';
    // Save the image to its new destination
    $save_image = save_image_from_URL($image_url, $image_location);
    // Confirm thenew image exists in the saved_images
    // folder.
    if (file_exists($image_location)) {
    echo "Image saved successfully";
    } else {
    echo "An error occurred. Please check your code";
    }
    ?>
    

    输出结果如下:

    使用 PHP fread 和 fwrite 从 URL 保存图像


    在 PHP 中保存 gzip 图像

    如果图像采用 gzip 压缩,本文中讨论的方法可能不起作用。 作为解决方法,我们修改了第一个使用 file_put_contents() 和 file_get_contents() 的示例。

    这一次,我们获取图像标头并检查 gzip 编码。 如果为真,我们在保存之前解码图像; 否则,我们使用 PHP copy() 函数复制图像。

    
    
    // Set the image URL and its new location
    $image_url = 'https://i.imgur.com/PpJnfpL.jpeg';
    $image_location = 'saved_images/05_Application_UI.png';
    
    // Fetch all headers from the URL
    $image_headers = get_headers($image_url);
    
    // Check if content encoding is set
    $content_encoding = isset($image_headers['Content-Encoding']) ? $image_headers['Content-Encoding'] : null;
    
    // Set gzip decode flag
    $gzip_decode = ($content_encoding === 'gzip') ? true : false;
    
    // If the image is gzipped, decode it before
    // placing it in its folder.
    if ($gzip_decode) {
    file_put_contents($image_location, gzdecode(file_get_contents($image_url)));
    } else {
    copy($image_url, $image_location);
    }
    // Confirm thenew image exists in the saved_images
    // folder.
    if (file_exists($image_location)) {
    echo "Image saved successfully";
    } else {
    echo "An error occurred. Please check your code";
    }
    ?>
    

    输出结果如下:

    使用 Gzip 压缩保存图像

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 后端开发 PHP编程
    相关文章 更多
    接口日志记录表怎么做?字段设计与填写方法
    接口日志记录表怎么做?字段设计与填写方法

    深入解析接口日志记录表的字段设计原则,涵盖请求头、参数、响应体、耗时等关键数据的采集与存储方法,提供可直接落地的建表代码与性能优化建议,解决线上问题排查难、数据追溯缺失的痛点。

    SQL增删改操作规范:INSERT、UPDATE与DELETE语句详解
    SQL增删改操作规范:INSERT、UPDATE与DELETE语句详解

    掌握SQL增删改核心规范:INSERT必须指定列清单以防结构变更错误;UPDATE和DELETE执行前务必通过SELECT确认WHERE条件范围;利用事务BEGIN/ROLLBACK机制实现误操作回滚。本文结合PostgreSQL语法与跨库差异,提供从语句编写到结果验证的完整安全操作流程,帮助开发者规避生产环境数据风险。

    接口分页查询怎么设置page和size参数
    接口分页查询怎么设置page和size参数

    遇到接口分页数据对不上?本文解析page和size参数的核心设置规则,包括起始索引选择、默认值配置及异常处理,助你避开常见的分页陷阱。

    Java发送post请求发送json数据的实现方法与代码示例
    Java发送post请求发送json数据的实现方法与代码示例

    深入解析Java发送JSON格式POST请求的实现机制,对比原生API与第三方库的代码差异,提供可复制的代码示例,并探讨超时设置、编码处理及微服务场景下的例外情况。

    php解析json内嵌json数据教程及取值方法
    php解析json内嵌json数据教程及取值方法

    本文详解PHP中json_decode处理嵌套JSON数据的机制,对比对象与数组模式的取值差异,提供防止空指针错误的健壮代码示例,帮助开发者快速定位解析失败原因。

    mysql添加字段语句及具体操作方法详解
    mysql添加字段语句及具体操作方法详解

    遇到需要给现有MySQL表增加新列的情况?本文详细解析ALTER TABLE ADD COLUMN语句的标准写法,包括如何在指定位置插入字段、设置默认值以及批量操作的技巧,助你避开锁表风险,轻松完成结构变更。

    python 雷达图开发环境搭建与验证:后端开发者实操指南
    python 雷达图开发环境搭建与验证:后端开发者实操指南

    针对后端开发者的 python 雷达图实操指南。包含基于官方文档的环境准备、venv 虚拟环境创建、pip 依赖管理及验证命令,提供清晰的排错决策图与适用边界说明。

    python 截图:环境准备、实操流程与故障排查指南
    python 截图:环境准备、实操流程与故障排查指南

    面向后端开发者的 python 截图技术文章,涵盖从环境检查、虚拟环境创建到依赖管理的完整流程。提供基于官方文档的验证命令与决策路径,帮助读者快速定位并解决截图任务中的环境问题。

    python编程语言:环境准备、实操流程与验证边界
    python编程语言:环境准备、实操流程与验证边界

    详解 python编程语言 的基础概念与实操步骤。涵盖版本检查、venv 虚拟环境隔离、pip 依赖安装及 sys.executable 验证方法,提供清晰的决策路径与适用边界说明。

    python面试准备:环境配置、实操流程与验证命令
    python面试准备:环境配置、实操流程与验证命令

    为后端开发者提供“python面试”相关的技术准备步骤,包括版本检查、虚拟环境创建、依赖安装及验证命令,严格遵循Python官方文档规范。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。