Estou usando um filtro em escala de cinza em todas as imagens carregadas na minha instalação do WordPress. No entanto, quero a imagem em escala de cinza e a imagem colorida no meu site (coloridas ao passar o mouse). A maneira que eu tentei fazer isso foi criar um monte de add_image_size (), assim:
add_image_size( 'gho-small', 100, 0, true ); // Used for small images
add_image_size( 'gho-small-grayscale', 100, 0, true ); // Used for small grayscaled images
add_image_size( 'gho-medium', 200, 0, true ); // Used for medium images
add_image_size( 'gho-medium-grayscale', 200, 0, true ); // Used for medium grayscaled images
add_image_size( 'gho-large', 400, 0, true ); // Used for large images
add_image_size( 'gho-large-grayscale', 400, 0, true ); // Used for large grayscaled images
E então eu fazia um filtro nas imagens e pegava apenas os IDs em escala de cinza * e os salvava:
add_filter('wp_generate_attachment_metadata','gholumns_grayscale_filter');
function gholumns_grayscale_filter($meta)
{
$dir = wp_upload_dir();
$file = trailingslashit($dir['path']).$meta['sizes']['gho-large-grayscale']['file'];
do_grayscale_filter($file);
return $meta;
}
Funcionaria bem, mas aparentemente add_image_size () analisa os argumentos de largura e altura e, quando um tamanho já está definido com essa combinação, o tamanho não é adicionado. Entendo que, como a função é adicionar novos tamanhos, e se o tamanho for uma duplicata, normalmente é melhor não adicioná-lo novamente para economizar tempo de processamento. Mas agora eu quero duas imagens do mesmo tamanho, mas uma com um filtro aplicado e a outra o original.
Como posso conseguir isso?
Eu tentei adicionar outro tamanho, que é apenas um pixel mais largo, como:
add_image_size( 'gho-small-grayscale', 101, 0, true ); // Used for small grayscaled images
E, em seguida, redimensionando a imagem mais tarde, após o filtro voltar para 100/200/400
o que for. Mas não parece certo, e também atrapalha as get_the_post_thumbnail()
chamadas, pois ainda se pensa que a dimensão da imagem é 101x$height
. Também não é tão simples como redimensionar a imagem de volta em um pixel horizontal e verticalmente, pois as proporções podem causar que a altura seja > 1px
mais alta quando você tem uma largura + 1px.