mothership-ec / cog-imageresize
为Cog提供的基于动态URI的图片缩放功能
Requires
- php: >=5.4.0
- imagine/imagine: ~0.4
- mothership-ec/cog: ~4.0
Suggests
- ext-imagemagick: Provides faster and more powerful image manipulation libraries
This package is not auto-updated.
Last update: 2021-03-22 11:08:19 UTC
README
缩放类和控制器
可以通过服务 image.resize
访问缩放器
$this->get('image.resize')->resize($url);
Resize-class有两个重要方法
- generateUrl($url, $width, $height) - 生成一个包含文件名、宽度、高度和一个哈希的URL,该哈希将是文件的后续位置。$url是我们想要缩放的图像的公开可访问路径。此方法生成的URL可能看起来像这样:
resize_directory/test_AUTOx400-de46b9.jpg
- resize($url) - 执行实际的缩放,返回缩放后的文件并将其保存到由 $url 定义的路径中。传入的 $url 是由 generateUrl() 生成的URL。
这意味着,当我们有一个名为 test.jpg
的图像,它保存在 cog:://public/files
中时,我们可以这样缩放它
$resizer = $this->get('image.resize');
$url = $resizer->generateUrl('/files/test.jpg', null, 400); // you can leave out either height or width!
$resizedImg = $resizer->resize($url);
我们之所以采取生成URL的方式,是因为这允许我们通过控制器来控制行为:当我们想在视图中渲染缩放后的图像时,我们可以将生成的 $url
作为 src
属性传入。会发生的情况是,第一次请求图像时,路由器将调用图像缩放控制器,该控制器将缩放图像,将其保存到新位置并返回图像。之后,图像已经存在,可以像任何其他图像一样请求。
当与twig扩展一起使用时,这特别方便。
Twig扩展
有两种方法允许我们访问由 ImageResize\Resize
类提供的 generateUrl()
方法
-
getResizedUrl(ResizableInterface $file, $width, $height) - 使用 ResizableInterface 定义的
getUrl()
方法返回Resizer::generateUrl
的结果<img src="{{ getResizedUrl(file, 500, 200) }}" width="500" height="200" alt="file.altText">
-
getResizedImage(ResizableInterface $file, $width, $height, $attributes = array()) - 返回一个渲染的
<img>
标签,包括src
、width
、height
、alt
(使用 ResizableInterface 的getAltText()
方法)和通过 $attributes 数组使用的附加属性{# file->getUrl() = '/test.jpg' #} {# file->getAltText() = 'test' #} {{ getResizedImage(file, 500, 200, {'class': 'file'}) }}
这将渲染
<img src="/test_500x200-88953b.jpg" width="500" height="200" alt="test" class="file">
如果 $attributes-array 提供了一个
alt
属性,则使用文件getAltText()
来确定 alt 文本,而不是使用$attributes['alt']
{{ getResizedImage(file, 500, 200, {'alt': 'abcabc'}) }}
这将返回这个
<img src="/test_500x200-88953b.jpg" width="500" height="200" alt="abcabc">
默认图像
如果传递给 resize
方法的 $url
不是系统中的现有文件路径,则将缩放默认图像。
此默认图像可以在 config/app.yml
中配置
image-resize:
default-image-path: cogules/MyApp:SetUp/images/default.png
当 generateUrl
方法查找文件时,如果文件不存在,则返回默认图像的URL。这样,每种大小只生成一个图像,并且一旦文件上传到服务器,就可以立即生成正确的缩放图像。