php中使用gd库实现下载网页中所有图片

来讲一下使用 PHP 中的 GD 库实现下载网页中所有图片的攻略。

一、环境准备

使用 GD 库下载网页中所有图片,需要确保服务器支持 GD 库。可以使用以下命令确认是否安装:

php -m | grep gd

如果未找到 gd 模块,请查看是否已正确安装 GD 库。

二、获取页面中的图片链接

下载网页中所有图片,需要首先获取网页中的所有图片链接,可以使用 PHP 的 file_get_contents 函数获取网页内容,使用正则表达式匹配图片链接。

以下是示例代码:

$url = 'https://example.com';
$content = file_get_contents($url);
preg_match_all('/<img.*?src="(.*?)"/i', $content, $matches);
$imageUrls = array_unique($matches[1]);

其中,使用正则表达式匹配出来的图片链接可能包含相对路径和绝对路径,需要转换为绝对路径才能正常下载。

三、下载图片

使用 GD 库下载图片,可以使用 GD 库的 imagecreatefromjpegimagecreatefrompngimagecreatefromgif 函数创建图片资源,然后使用 imagejpegimagepngimagegif 函数将图片写入文件。

示例代码如下:

foreach ($imageUrls as $imageUrl) {
    $absoluteUrl = get_absolute_url($url, $imageUrl); // 获取图片的绝对路径
    $imageContent = file_get_contents($absoluteUrl);
    if (!$imageContent) {
        continue;
    }
    $imageInfo = @getimagesizefromstring($imageContent); // 获取图片信息
    if (!$imageInfo) {
        continue;
    }
    $imageType = $imageInfo[2];
    switch ($imageType) {
        case IMAGETYPE_JPEG:
            $image = imagecreatefromjpeg($absoluteUrl);
            imagejpeg($image, 'images/' . basename($imageUrl));
            break;
        case IMAGETYPE_PNG:
            $image = imagecreatefrompng($absoluteUrl);
            imagepng($image, 'images/' . basename($imageUrl));
            break;
        case IMAGETYPE_GIF:
            $image = imagecreatefromgif($absoluteUrl);
            imagegif($image, 'images/' . basename($imageUrl));
            break;
        default:
            break;
    }
    imagedestroy($image);
}

其中,get_absolute_url 函数用于获取图片的绝对路径。

四、示例说明

以下是两个示例说明:

示例一

下载百度首页中所有图片。

示例代码:

$url = 'https://www.baidu.com';
$content = file_get_contents($url);
preg_match_all('/<img.*?src="(.*?)"/i', $content, $matches);
$imageUrls = array_unique($matches[1]);
foreach ($imageUrls as $imageUrl) {
    $absoluteUrl = get_absolute_url($url, $imageUrl);
    $imageContent = file_get_contents($absoluteUrl);
    if (!$imageContent) {
        continue;
    }
    $imageInfo = @getimagesizefromstring($imageContent);
    if (!$imageInfo) {
        continue;
    }
    $imageType = $imageInfo[2];
    switch ($imageType) {
        case IMAGETYPE_JPEG:
            $image = imagecreatefromjpeg($absoluteUrl);
            imagejpeg($image, 'images/' . basename($imageUrl));
            break;
        case IMAGETYPE_PNG:
            $image = imagecreatefrompng($absoluteUrl);
            imagepng($image, 'images/' . basename($imageUrl));
            break;
        case IMAGETYPE_GIF:
            $image = imagecreatefromgif($absoluteUrl);
            imagegif($image, 'images/' . basename($imageUrl));
            break;
        default:
            break;
    }
    imagedestroy($image);
}

示例二

下载LOFTER博客中所有图片。

示例代码:

$url = 'https://xxxxx.lofter.com/';
$content = file_get_contents($url);
preg_match_all('/<img.*?src="(.*?)"/i', $content, $matches);
$imageUrls = array_unique($matches[1]);
foreach ($imageUrls as $imageUrl) {
    $absoluteUrl = get_absolute_url($url, $imageUrl);
    $imageContent = file_get_contents($absoluteUrl);
    if (!$imageContent) {
        continue;
    }
    $imageInfo = @getimagesizefromstring($imageContent);
    if (!$imageInfo) {
        continue;
    }
    $imageType = $imageInfo[2];
    switch ($imageType) {
        case IMAGETYPE_JPEG:
            $image = imagecreatefromjpeg($absoluteUrl);
            imagejpeg($image, 'images/' . basename($imageUrl));
            break;
        case IMAGETYPE_PNG:
            $image = imagecreatefrompng($absoluteUrl);
            imagepng($image, 'images/' . basename($imageUrl));
            break;
        case IMAGETYPE_GIF:
            $image = imagecreatefromgif($absoluteUrl);
            imagegif($image, 'images/' . basename($imageUrl));
            break;
        default:
            break;
    }
    imagedestroy($image);
}

五、总结

使用 PHP 中的 GD 库实现下载网页中所有图片,需要以下步骤:获取页面中的图片链接,下载图片,同时需要处理相对路径和绝对路径的转换。注意,下载网页中所有图片可能会涉及到版权问题,请谨慎使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php中使用gd库实现下载网页中所有图片 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • php动态生成JavaScript代码

    要实现在 PHP 中动态生成 JavaScript 代码,有几个基本步骤: PHP 生成 JavaScript 代码时,需要使用字符串拼接的方式,将 JavaScript 代码以字符串的方式拼接起来。 PHP 中的字符串中如果包含 JavaScript 字符串中的特殊字符,例如双引号、单引号、反斜杠等,需要进行转义,以避免出现语法错误。可以使用转义字符 \ …

    PHP 2023年5月23日
    00
  • 微信小程序如何获取用户手机号

    微信小程序可以使用手机号作为用户的唯一标识,可以通过微信提供的API获取用户的手机号,具体操作步骤如下: 1. 开启微信用户手机号授权 在小程序的app.json文件中,设置如下选项,表示开启用户手机号授权功能: { "permission": { "scope.userLocation": { "desc&…

    PHP 2023年5月23日
    00
  • phpmyadmin下载、安装、配置教程

    PHPMyAdmin下载、安装、配置教程 PHPMyAdmin是一款用于MySQL数据库管理的免费开源工具。本文将详细讲解PHPMyAdmin的下载、安装和配置过程,帮助读者快速掌握这一工具。 下载PHPMyAdmin 可以从官方网站(https://www.phpmyadmin.net/downloads/)下载PHPMyAdmin的最新版本,也可以从Gi…

    PHP 2023年5月27日
    00
  • php获取文件名后缀常用方法小结

    下面就是关于”php获取文件名后缀常用方法小结”的攻略: 什么是文件名后缀? 先说一下文件名后缀的定义吧。在电脑中,每个文件都有一个后缀,是以点号(.)作为分界线,表示文件的类型或格式,例如 “.jpg” 表示是一张图片,”.txt” 表示是一个文本文件。后缀对于程序处理文件时非常重要,因此我们在编写 PHP 代码时经常会用到获取文件名后缀的操作。 获取文件…

    PHP 2023年5月26日
    00
  • php数组操作之键名比较与差集、交集赋值的方法

    下面就给您讲解一下 PHP 数组操作之键名比较与差集、交集赋值的方法。 比较键名 在 PHP 中比较两个数组的键名,可以使用 array_diff_key() 函数,它的作用是返回数组 $array1 中存在但是 $array2 中不存在的键名。示例: //数组1 $array1 = array(‘name’ => ‘张三’, ‘age’ => …

    PHP 2023年5月26日
    00
  • PHP内置加密函数详解

    PHP内置加密函数详解 本文将对PHP内置的加密函数进行详细的讲解,包括常用的hash算法、加密方式以及其使用方法。 常用hash算法 md5 md5是一种广泛使用的hash算法。它将任意长度的消息压缩到一个128位的hash值,通常用于数据完整性校验、数字签名等。 // 使用md5计算字符串的hash值 $str = ‘Hello World’; $has…

    PHP 2023年5月27日
    00
  • PHP使用函数用法详解

    PHP使用函数用法详解 什么是函数 函数是将一些指令打包起来,以便重用的代码块。在 PHP 中,函数是基本的代码组织单元,允许您将代码块划分为逻辑段。通过给函数名称指定参数列表,可以将数据传递到函数内部。函数可以返回值来提供一个结果。 函数的声明方式 function functionName($parameter1, $parameter2, …) {…

    PHP 2023年5月27日
    00
  • PHP中in_array函数使用的问题与解决办法

    接下来我将详细讲解一下“PHP中in_array函数使用的问题与解决办法”的完整攻略。 问题描述 在使用PHP中的in_array()函数判断是否存在某个元素时,有时候会出现判断不准确的情况。这种情况通常出现在类型比较严格的场景下,例如:判断某个元素是否在数组中时,数组中存储的是字符串类型,而需要查找的元素是整型或者浮点型等其他类型数据。 解决办法 1. 使…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部