adevendorf / craft-pretzelimage
实时根据图像请求生成图像转换 -- 直接通过Web服务器作为公共文件加载,或与CDN结合。
v3.0.0
2024-06-11 17:22 UTC
Requires
- ext-fileinfo: *
- craftcms/cms: ^5.0.0
- intervention/image: ^2.7.0
README
Pretzel Image在浏览器请求时生成图像转换。生成的图像存储在公共文件夹中。因为控制器路由与实际文件相同,所以我们让Web服务器在将请求传递给插件处理之前先提供实际文件。
生成的文件可以从服务器随时删除,因为如果它不存在,它将重新创建。
图像被组织成两个字符的目录,然后是资产ID子目录。这样做是为了减轻单个文件夹中目录/文件过多的可能性。
此插件的原目的是在网站前面放置CDN,这样这些生成的图像在Craft CMS服务器上只能短暂存在。
实际上,此插件适用于高流量网站上的多实例Craft CMS配置。通过使用NFS服务器,可以在所有服务器之间重用相同的生成图像,然后对图像生成进行CMS负载均衡。
配置
Pretzel默认即可使用,但您可以自定义它。
PRETZEL_PATH
默认情况下,图像存储在@web/_imgs目录中,但您可以在.env文件中使用PREZTEL_PATH覆盖它。
PRETZEL_PATH="images"
PRETZEL_HOSTS
当Craft CMS处于Dev模式时,Pretzel将允许任何主机生成图像,否则它将只接受来自当前定义的网站URL或您在中的引用者。
PRETZEL_HOSTS="www.somesite.com,help.somesite.com"
如何使用
您需要将3个参数传递给url方法。
- Craft CMS资产
- 变换的对象(或数组)
- (可选)将应用于所有图像的默认变换对象
craft.pretzel.url(asset, { width: 100, height: 50 }, { position: asset.getFocalPoint() });
Twig
{% set asset = craft.assets().one() %} {% set images = craft.pretzel.url(asset, [ { width: 600, ratio: 1/1}, { width: 1024, ratio: 16/9 } ], { position:asset.getFocalPoint()|default('50% 50%') }) %} <img src="{{ images[0] }}" alt="{{ asset.title }}" />
如果传递了多个变换配置,则返回数组而不是URL字符串。
PHP(元素API)
use adevendorf\pretzelimage\Plugin; $asset = $entry->image->one(); $image = Plugin::$plugin->pretzelService->url($asset, [ 'width' => 600, 'height' => 360, 'position' => $asset->getFocalPoint() ]);
图像选项
宽度
高度
比例
位置:50-50(默认)
模式:裁剪(默认),填充
要求
此插件需要Craft CMS 4或更高版本,以及PHP 8.0.2或更高版本。
TODO
- 根据文件年龄自动从文件空间中删除旧图像。
- 提供一个选项以从不存储生成的文件。
- 允许定义CDN URL而不是使用Craft CMS网站URL。
- 测试GraphQL支持