J'utilise un filtre en niveaux de gris sur toutes les images téléchargées dans mon installation WordPress. Cependant, je veux à la fois l'image à l'échelle grise et l'image colorée dans mon site Web (colorée en survol). La façon dont j'ai essayé de le faire était de créer un tas de add_image_size () comme ceci:
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
Et puis je ferais un filtre sur les images et ne prendrais que les ID * -grayscale et les enregistrer:
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;
}
Cela fonctionnerait bien, mais apparemment, add_image_size () examine les arguments width et height et lorsqu'une taille est déjà définie avec cette combinaison, la taille n'est pas ajoutée. Je peux comprendre que, puisque la fonction consiste à ajouter de nouvelles tailles, et si la taille est un doublon, il est normalement préférable de ne pas l'ajouter à nouveau pour gagner du temps de traitement. Mais maintenant, je veux deux images de la même taille, mais une avec un filtre appliqué et l'autre l'original.
Comment puis-je atteindre cet objectif?
J'ai essayé d'ajouter une autre taille qui est juste un pixel plus large, comme:
add_image_size( 'gho-small-grayscale', 101, 0, true ); // Used for small grayscaled images
Et puis redimensionner l'image plus tard après le filtre à nouveau 100/200/400
. Mais cela ne se sent pas bien, et cela gâche aussi les get_the_post_thumbnail()
appels comme on pense toujours que la dimension d'image est 101x$height
. Ce n'est pas aussi simple que de redimensionner l'image d'un pixel horizontalement et verticalement car les rapports pourraient faire en sorte que la hauteur soit > 1px
plus grande lorsque vous avez une largeur + 1 px.