MagickCache (cache de imagens)
O MagickCache fornece métodos e ferramentas seguros para armazenar em cache imagens, sequências de imagens, vídeo, áudio ou metadados em uma pasta local. Qualquer conteúdo é mapeado em memória para uma recuperação eficiente. Eficiências adicionais são possíveis ao recuperar apenas uma parte de uma imagem. O conteúdo pode ser persistente ou você pode atribuir um tempo de vida (TTL) para expirar o conteúdo automaticamente quando o TTL for excedido. O MagickCache suporta conteúdo praticamente ilimitado, na casa dos bilhões de imagens, tornando-o adequado como um serviço de imagens para a web.
O MagickCache funciona em conjunto com o ImageMagick. Baixe o MagickCache e instale-o. Agora você vai querer criar o cache e populá-lo com imagens, vídeo e metadados associados.
Criar um MagickCache
Você precisará de um lugar para armazenar e recuperar seu conteúdo. Vamos criar um cache em nosso sistema de arquivos local:
$ magick-cache -passkey passkey.txt create /opt/magick-cache
Onde passkey.txt contém a passkey do seu cache. Não perca sua passkey. Sem ela, você não conseguirá identificar, expirar ou excluir o conteúdo do seu cache.
Você só precisa criar um MagickCache uma vez. Você pode, no entanto, criar mais de um MagickCache com caminhos diferentes.
Depois que o MagickCache for criado, você vai querer populá-lo com conteúdo que inclui imagens, vídeo, áudio ou metadados.
Colocar conteúdo no MagickCache
Vamos adicionar uma imagem do elenco de um filme ao nosso cache recém-criado:
$ magick-cache put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg
Observe que o identificador da imagem é um IRI composto por project /type /resource-path. Neste exemplo, o project é movies, o type é image e o resource path é mission-impossible/cast/rebecca-ferguson. O caminho identifica exclusivamente um recurso do cache. Duas imagens diferentes não podem ser armazenadas com o mesmo resource path. Em vez disso, use algo como mission-impossible/cast/20210508-rebecca-ferguson-1 e mission-impossible/cast/20210508-rebecca-ferguson-2.
Agora, vamos definir uma passkey de recurso e o tempo de vida em 2 dias. A qualquer momento após o segundo dia, a imagem é excluída automaticamente com a função expire. Para obter, expirar ou excluir a imagem, você precisará usar a mesma passkey de recurso:
$ magick-cache -passkey passkey.txt -ttl "2 days" put /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.jpg
Onde passkey.txt contém sua passkey de recurso. Não perca sua passkey. Sem ela, você não conseguirá obter, identificar, expirar ou excluir os recursos que você possui.
A passkey de recurso garante que apenas você e o proprietário do cache possam acessar sua imagem. Para impedir que o proprietário do cache visualize seu conteúdo, embaralhe-o com:
$ 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
Observe que blobs e metadados são armazenados no cache em texto simples. Para evitar bisbilhotagem, embaralhe o conteúdo antes de armazená-lo no cache.
Obter conteúdo do MagickCache
Em algum momento você vai querer recuperar seu conteúdo; vamos obter nossa imagem original do elenco do cache:
$ magick-cache -passkey passkey.txt get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
Observe que a imagem original foi colocada no cache no formato JPEG. Aqui, convenientemente, a convertemos para o formato PNG ao extrair a imagem.
A opção -extract é útil ao recuperar uma imagem. Para extrair uma parte da imagem, especifique a largura, a altura e o deslocamento do bloco:
$ magick-cache -passkey passkey.txt -extract 100x100+0+0 get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
Para redimensionar em vez disso, não especifique o deslocamento:
$ magick-cache -passkey passkey.txt -extract 100x100 get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
Se sua imagem estiver embaralhada, forneça a passphrase para desembaralhá-la:
$ magick-cache -passkey passkey.txt -passphrase passphrase.txt get /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson rebecca-ferguson.png
Excluir conteúdo do MagickCache
Podemos excluir conteúdo explicitamente:
$ magick-cache -passkey passkey.txt delete /opt/magick-cache movies/image/mission-impossible/cast/rebecca-ferguson
ou podemos excluir todas as imagens do elenco que expiraram (excederam seu respectivo tempo de vida); experimente este comando:
$ magick-cache -passkey passkey.txt expire /opt/magick-cache movies/image/mission-impossible/cast
Identificar o conteúdo do MagickCache
Talvez você queira identificar todo o conteúdo que você possui:
$ 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
Cada entrada inclui o IRI, as dimensões da imagem no caso de imagens, a extensão do conteúdo em bytes, o tempo de vida, se o recurso está expirado (indicado com um *) e a data de criação.
Outros podem armazenar conteúdo no cache ao lado do seu conteúdo. No entanto, o conteúdo deles não está disponível para você. Você não pode obter, identificar, expirar ou excluir conteúdo que não lhe pertence, conforme determinado pela sua passkey secreta.
O proprietário do MagickCache pode obter, identificar, expirar ou excluir todo o conteúdo, incluindo o conteúdo que você possui, com este comando, por exemplo:
$ magick-cache -passkey passkey.txt identify /opt/magick-cache /
Observe que os recursos expirados são anotados com um asterisco.
O MagickCache não é apenas para imagens
Além do type image, você pode armazenar o conteúdo da imagem em sua forma original, vídeo ou áudio como content type blob, ou metadados com um content type meta:
$ magick-cache -passkey passkey.txt put /opt/magick-cache movies/blob/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.mp4
ou
$ magick-cache -passkey passkey.txt put /opt/magick-cache movies/meta/mission-impossible/cast/rebecca-ferguson 20210508-rebecca-ferguson.txt
As imagens devem estar em um formato que o ImageMagick entenda. Os metadados devem ser texto. Os blobs podem ser qualquer conteúdo, incluindo imagens, vídeo, áudio ou arquivos binários.
Excluir um MagickCache
O proprietário do MagickCache pode excluir completamente todo o conteúdo dentro de um cache:
$ magick-cache -passkey passkey.txt delete /opt/magick-cache /
Tenha cuidado: após este comando, seu conteúdo em cache é perdido de forma irrevogável.
Segurança
A segurança do MagickCache não é criptograficamente forte. Em vez disso, ele gera um hash exclusivo para cada recurso, garantindo que o ID do recurso não possa ser descoberto. Um recurso é acessível tanto ao usuário do cache quanto ao proprietário do cache, desde que possam apresentar suas respectivas passkeys. Ele também é acessível a qualquer pessoa com privilégios suficientes para acessar o caminho de disco do MagickCache.