Color Modes

MagickCache:高效的图像缓存

MagickCache 提供安全的方法和工具,用于将图像、图像序列、视频、音频或元数据缓存到本地文件夹中。任何内容都将内存映射以实现高效检索。通过检索图像的一部分,可以实现额外的效率。内容可以持久存在,或者您可以分配生存时间 (TTL) 以在 TTL 超过时自动使内容过期。MagickCache 支持几乎无限的内容,多达数十亿张图像,使其适用于作为 Web 图像服务。

MagickCache 与 ImageMagick 协同工作。下载 MagickCache 并安装。现在,您需要创建缓存并使用图像、视频和相关元数据填充它。

创建 MagickCache

您需要一个存储和检索内容的地方。让我们在本地文件系统上创建一个缓存

$ magick-cache -passkey passkey.txt create /opt/magick-cache

其中 `passkey.txt` 包含您的缓存密钥。请勿丢失您的密钥。没有它,您将无法识别、过期或删除缓存中的内容。

您只需要创建一次 MagickCache。但是,您可以使用不同的路径创建多个 MagickCache。

创建 MagickCache 后,您需要使用包含图像、视频、音频或元数据的内容填充缓存。

将内容放入 MagickCache

让我们将一部电影的演员图像添加到我们新创建的缓存中

$ magick-cache put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg

请注意,图像标识符是一个由 项目/类型/资源路径 组成的 IRI。在此示例中,项目为 movies,类型为 image,资源路径为 mission-impossible/cast/rebecca-ferguson。该路径唯一地标识缓存资源。无法使用相同的资源路径存储两个不同的图像。而是使用类似 mission-impossible/cast/20210508-rebecca-ferguson-1mission-impossible/cast/20210508-rebecca-ferguson-2 的内容。

现在,让我们设置资源密钥并将生存时间设置为 2 天。在第二天之后,图像将使用 expire 函数自动删除。要获取、过期或删除图像,您需要使用相同的资源密钥

$ magick-cache -passkey passkey.txt -ttl "2 days" put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg

其中 passkey.txt 包含您的资源密钥。请勿丢失您的密钥。没有它,您将无法获取、识别、过期或删除您拥有的资源。

资源密钥确保只有您和缓存所有者可以访问您的图像。为了防止缓存所有者查看其内容,请使用以下命令对其进行加密

$ magick-cache -passkey passkey.txt -passphrase passphrase.txt -ttl "2 days" put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg

请注意,Blob 和元数据以纯文本形式存储在缓存中。为了防止窥探,请在将内容存储到缓存中之前对其进行加密。

从 MagickCache 获取内容

最终您需要检索您的内容,让我们从缓存中获取原始演员图像

$ magick-cache -passkey passkey.txt get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png

请注意,原始图像以 JPEG 格式放入缓存中。在这里,我们方便地将其转换为 PNG 格式,同时提取图像。

当检索图像时,-extract 选项非常有用。要提取图像的一部分,请指定图块宽度、高度和偏移量

$ magick-cache -passkey passkey.txt -extract 100x100+0+0 get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png

要调整大小,请不要指定偏移量

$ magick-cache -passkey passkey.txt -extract 100x100 get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png

如果您的图像已加密,请提供密码对其进行解密

$ magick-cache -passkey passkey.txt -passphrase passphrase.txt get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png

从 MagickCache 删除内容

我们可以显式删除内容

$ magick-cache -passkey passkey.txt delete /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson

或者我们可以删除所有已过期的演员图像(超过了各自的生存时间),尝试此命令

$ magick-cache -passkey passkey.txt expire /opt/magick-cache movies/image/mission-impossible/cast

识别 MagickCache 内容

也许您想识别您拥有的所有内容

$ magick-cache -passkey passkey.txt identify /opt/magick-cache movies/image/mission-impossible/cast
movies/image/mission-impossible/cast/rebecca-ferguson[1368x912] 406B 1:0:0:0 2021-05-30T17:41:42Z
identified 1 resources

每个条目都包括 IRI、图像的图像尺寸、内容大小(以字节为单位)、生存时间、资源是否已过期(用 `*` 表示)以及创建时间。

其他人可以在您的内容旁边将内容存储在缓存中。但是,您无法访问他们的内容。您无法获取、识别、过期或删除您不拥有的内容,这由您的密钥决定。

MagickCache 所有者可以使用此命令获取、识别、过期或删除所有内容,包括您拥有的内容,例如

$ magick-cache -passkey passkey.txt identify /opt/magick-cache /

请注意,已过期的资源用星号注释。

MagickCache 不仅适用于图像

除了 image 类型外,您还可以将其原始形式的图像内容、视频或音频存储为 blob 内容类型,或将元数据存储为 meta 内容类型

$ magick-cache -passkey passkey.txt put /opt/magick-cache movies/blob/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.mp4

$ magick-cache -passkey passkey.txt put /opt/magick-cache movies/meta/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.txt

图像必须采用 ImageMagick 理解的格式。元数据必须是文本。Blob 可以是任何内容,包括图像、视频、音频或二进制文件。

删除 MagickCache

MagickCache 所有者可以完全删除缓存中的所有内容

$ magick-cache -passkey passkey.txt delete /opt/magick-cache /

请注意,执行此命令后,您的缓存内容将无法恢复。

安全

MagickCache 安全性不是加密强度的。相反,它为每个资源生成一个唯一的哈希值,确保无法发现资源 ID。只要可以提供各自的密钥,缓存的用户和缓存所有者都可以访问资源。对于具有足够权限访问 MagickCache 磁盘路径的任何人,也可以访问这些资源。