来讲一下使用 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 库的 imagecreatefromjpeg
、imagecreatefrompng
、imagecreatefromgif
函数创建图片资源,然后使用 imagejpeg
、imagepng
、imagegif
函数将图片写入文件。
示例代码如下:
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技术站