arthurhoaro / web-thumbnailer
PHP 库,可用于获取任意给定 URL 的缩略图
Requires
- php: >=7.1
- phpunit/php-text-template: ^1.2 || ^2.0
Requires (Dev)
- gskema/phpcs-type-sniff: ^0.13.1
- php-coveralls/php-coveralls: ^2.0
- phpstan/phpstan: ^0.12.9
- phpunit/phpunit: ^7.0 || ^8.0 || ^9.0 || dev-master
- squizlabs/php_codesniffer: ^3.0
README
PHP 库,可用于获取任意给定 URL 的缩略图(如果有的话)。
特性
- 支持各种特定网站功能:Imgur、FlickR、Youtube、XKCD 等。
- 与支持 OpenGraph(标签元数据
og:image)的任何网站协同工作 - 或使用直接链接到图像
- 本地缓存
- 根据给定设置进行缩放和/或裁剪
要求
必需
- PHP 7.1(
v2.0.0+) - PHP 5.6(v1.x.x) - PHP GD 扩展
(强烈)推荐
- PHP cURL 扩展:它允许您下载缩略图而不必下载整个远程页面
安装
使用 Composer
composer require arthurhoaro/web-thumbnailer
使用方法
使用 WebThumbnailer 非常简单
require_once 'vendor/autoload.php'; use WebThumbnailer\WebThumbnailer; $wt = new WebThumbnailer(); // Very basic usage $thumb = $wt->thumbnail('https://github.com/ArthurHoaro'); // Using a bit of configuration $thumb2 = $wt->maxHeight(180) ->maxWidth(320) ->crop(true) ->thumbnail('https://github.com/ArthurHoaro'); echo '<img src="'. $thumb .'">'; echo '<img src="'. $thumb2 .'">'; // returns false $wt->thumbnail('bad url');
结果
缩略图配置
有 2 种方式来设置缩略图配置
- 使用如 使用方法 部分所示
WebThumbnailer辅助函数。 - 在获取缩略图时传递一个设置数组到
thumbnail()。这将覆盖使用辅助函数设置的任何设置。示例
$conf = [ WebThumbnailer::MAX_HEIGHT => 320, WebThumbnailer::MAX_WIDTH => 320, WebThumbnailer::CROP => true ]; $wt->thumbnail('https://github.com/ArthurHoaro', $conf);
下载模式
有 3 种下载模式,一次只能使用一种
- 下载(默认):将下载缩略图,调整大小并将其保存到缓存文件夹中。
- 热链接:如果域名授权,将使用 图像热链接,否则下载。
- 严格热链接:如果域名授权,将使用图像热链接,否则失败。
使用方法
// Download (default value) $wt = $wt->modeDownload(); $conf = [WebThumbnailer::DOWNLOAD]; // Hotlink $wt = $wt->modeHotlink(); $conf = [WebThumbnailer::HOTLINK]; // Hotlink Strict $wt = $wt->modeHotlinkStrict(); $conf = [WebThumbnailer::HOTLINK_STRICT];
警告:热链接意味着缩略图不会进行缩放,必须以原始大小下载。
图像大小
在下载模式下,可以使用最大宽度和高度设置来定义缩略图大小
- 使用最大宽度和最大高度,缩略图将调整大小以匹配第一个达到的限制。
- 仅使用最大高度,缩略图将调整到给定的高度,无论其宽度如何。
- 仅使用最大宽度,缩略图将调整到给定的高度,无论其宽度如何。
- 如果没有提供大小,将应用默认设置(见设置部分)。
使用方法
// Sizes are given in number of pixels as an integer $wt = $wt->maxHeight(180); $conf = [WebThumbnailer::MAX_HEIGHT => 180]; $wt = $wt->maxWidth(320); $conf = [WebThumbnailer::MAX_WIDTH => 180];
附加功能:对于支持有关缩略图大小的开放 API 的网站(例如 Imgur、FlickR),WebThumbnailer 确保下载符合大小要求的图像中最小的一个。
图像裁剪
图像缩放可能不够,缩略图可能需要固定大小。此选项将裁剪图像(从其中心)以匹配给定尺寸。
注意:必须提供最大宽度和高度才能使用图像裁剪。
使用方法
// Sizes are given in number of pixels as an integer $wt = $wt->crop(true); $conf = [WebThumbnailer::CROP => true];
缩放模式
此设置选择是否使用 imagecopyresized(缩放模式)或 imagecopyresampled(重采样模式)
重采样:更高的 CPI 使用,具有更好的图像缩放渲染。缩放:更快,CPU 使用量更低,但缩放后的图像可能看起来不是很好。
默认情况下,自引入此设置以来,此库使用 重采样 设置。
示例
|---------------------缩放---------------------|---------------------重采样---------------------|
使用方法
// Resize $wt = $wt->resize(); $conf = [WebThumbnailer::RESIZE_MODE => WebThumbnailer::RESIZE]; // Resample $wt = $wt->resample(); $conf = [WebThumbnailer::RESIZE_MODE => WebThumbnailer::RESAMPLE];
杂项
- NOCACHE:强制缩略图解析和下载,而不是使用缓存文件。
- 调试:如果发生错误或找不到缩略图,将抛出异常,而不是返回
false。 - 详细:如果无法获取缩略图,将在错误日志中记录条目。
- 下载超时:覆盖下载超时设置(以秒为单位)。
- 下载最大大小:覆盖下载最大大小设置(以字节为单位)。
使用方法
$wt = $wt ->noCache(true) ->debug(true) ->verbose(true) ->downloadTimeout(30) ->downloadMaxSize(4194304) ; $conf = [ WebThumbnailer::NOCACHE => true, WebThumbnailer::DEBUG => true, WebThumbnailer::VERBOSE => true, WebThumbnailer::DOWNLOAD_TIMEOUT => 30, WebThumbnailer::DOWNLOAD_MAX_SIZE => 4194304, ];
设置
设置以JSON格式存储,并可以使用自定义的JSON文件进行覆盖。
use WebThumbnailer\Application\ConfigManager; ConfigManager::addFile('conf/mysettings.json');
可用的设置
默认:download_mode:默认下载模式(DOWNLOAD、HOTLINK或HOTLINK_STRICT)。timeout:默认下载超时,以秒为单位。max_img_dl:默认下载最大大小,以字节为单位。max_width:如果没有提供大小要求,则默认最大宽度。max_height:如果没有提供大小要求,则默认最大高度。cache_duration:缓存有效持续时间,以秒为单位(使用负值表示无限缓存)。
路径:cache:缓存路径。
apache_version:根据Apache版本强制使用.htaccess语法,否则使用mod_version(允许的值:2.2或2.4)。
缩略图路径
在下载模式下,WebThumbnailer库返回的缩略图路径将取决于提供的path.cache设置。如果设置了绝对路径,则缩略图将附加到绝对路径,相对路径也是如此。
相对路径将取决于执行的入口点。例如,如果您的所有请求的入口点都是项目根目录中的index.php文件,则默认的cache/设置将在根目录中创建一个cache/文件夹。另一个例子,对于Symfony,缓存文件夹将相对于web/目录,这是带有app.php的入口点。
如果您在项目文件夹结构中没有单个入口点,则应提供绝对路径并自行处理路径。
贡献
WebThumbnailer可以通过在rules.json中添加新规则来轻松支持更多网站,使用默认的Finders之一,或为特定情况编写新的Finder。
请报告您可能遇到的任何问题。
此外,请随意纠正我可能在README中犯的任何糟糕的英语错误。
许可证
MIT许可证,请参阅LICENSE.md



