tacoberu/nette-media

为您的Nette应用程序生成的即时网页图片。非常受dotBlue(http://dotblue.net)的启发(和复制)。

v3.0.1 2024-05-08 20:19 UTC

This package is not auto-updated.

Last update: 2024-09-25 22:10:13 UTC


README

管理和提供Nette中的文件和图片。即时生成的图片缩略图。非常受dotBlue(http://dotblue.net)的启发(和复制)。

通常我们希望上传一些存储在一个或多个存储库中的文件或图片(这不是本项目的部分)。我们通常希望以优雅、可配置的方式访问文件。我们希望在图片上创建一些操作、预览、水印。我们通常希望仅在需要时生成预览,并在可能的情况下只生成一次。我们希望直接访问生成的预览,使用mod_rewrite(或类似技术)使其尽可能快。这也很方便,允许您强制下载图片。

安装

推荐的安装方式是通过Composer

composer require tacoberu/nette-media

在模板中使用

原始图片

<img n:media="users/david.jpg">
<a href={media users/david.jpg}>

它将生成

/media/users/david.jpg

图片预览。我们从预定义的变体中选择(防止DoS攻击)。预览在请求时自动生成并保存以供下次使用。

<a href={media users/david.jpg, small}>
<img n:media="users/david.jpg, small">

它将生成

/media/users/david.jpg?small

强制下载图片

<a href={download users/david.jpg}>

它将生成

/media/users/david.jpg?download

和非图片文件

<a href={media users/david.pdf}>
<link rel="stylesheet" media="screen,projection,tv" href="{media screen.css}" />

配置

extensions:
	media: Taco\NetteMedia\Extension

media:
	# Where source images are taken.
	providers:
		- Taco\NetteMedia\FileBasedProvider(%appDir%/../../var/uploads)

	# We need to deduce from the url that it is an image, and in which variant we get it
	route: Taco\NetteMedia\Router('media')

	# Transform over images. Typically previews.
	transformations:
		preview:
			- Taco\NetteMedia\ResizeTransformation(75, 250, 250, 'fit')
		medium:
			- Taco\NetteMedia\ResizeTransformation(75, 264, 264, 'fit')
		small:
			- Taco\NetteMedia\ResizeTransformation(75, 100, 100, 'fit')
		big:
			- Taco\NetteMedia\ResizeTransformation(100, 800, 600, 'fit')
			# - YourApp\NetteMedia\WatterMark

	# Where the previews are stored. It is possible to set it to public and configure .htaccess
	cache: Taco\NetteMedia\FileBasedThumbnailCache(%wwwDir%/cache)

示例 .htaccess

系统为我们即时生成预览很方便。但是,即使这些预览也必须通过Nette访问,这将更好。让我们添加(手动)这样的 .htaccess 规则。

# cached image previews
RewriteCond %{REQUEST_URI} ^/media/(.+)$
RewriteCond %{QUERY_STRING} ^(preview|medium|small|big)$
RewriteRule ^media/(.*)$ /cache/%{QUERY_STRING}/$1 [L]

# cached image original
RewriteCond %{REQUEST_URI} ^/media/(.+)$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^media/(.*)$ /cache/__orig__/$1 [L]

# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

现在应该可以这样工作

  • 我们将显示url /media/users/david.jpg?preview
  • 我们发现该图片的预览不存在,因此提取原始图片并对其执行预览转换。
  • 结果保存到 %wwwDir%/cache/preview
  • 下次访问时,图片已经位于 /cache/preview/users/david.jpg,并立即显示,在php使用之前。