arthurhoaro/web-thumbnailer

PHP 库,可用于获取任意给定 URL 的缩略图

v2.2.0 2022-11-24 19:36 UTC

This package is auto-updated.

Last update: 2024-09-24 23:34:42 UTC


README

Coverage Status Scrutinizer Code Quality

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:默认下载模式(DOWNLOADHOTLINKHOTLINK_STRICT)。
    • timeout:默认下载超时,以秒为单位。
    • max_img_dl:默认下载最大大小,以字节为单位。
    • max_width:如果没有提供大小要求,则默认最大宽度。
    • max_height:如果没有提供大小要求,则默认最大高度。
    • cache_duration:缓存有效持续时间,以秒为单位(使用负值表示无限缓存)。
  • 路径:
    • cache:缓存路径。
  • apache_version:根据Apache版本强制使用.htaccess语法,否则使用mod_version(允许的值:2.22.4)。

缩略图路径

在下载模式下,WebThumbnailer库返回的缩略图路径将取决于提供的path.cache设置。如果设置了绝对路径,则缩略图将附加到绝对路径,相对路径也是如此。

相对路径将取决于执行的入口点。例如,如果您的所有请求的入口点都是项目根目录中的index.php文件,则默认的cache/设置将在根目录中创建一个cache/文件夹。另一个例子,对于Symfony,缓存文件夹将相对于web/目录,这是带有app.php的入口点。

如果您在项目文件夹结构中没有单个入口点,则应提供绝对路径并自行处理路径。

贡献

WebThumbnailer可以通过在rules.json中添加新规则来轻松支持更多网站,使用默认的Finders之一,或为特定情况编写新的Finder。

请报告您可能遇到的任何问题。

此外,请随意纠正我可能在README中犯的任何糟糕的英语错误。

许可证

MIT许可证,请参阅LICENSE.md