Estoy usando un filtro de escala de grises en todas las imágenes cargadas en mi instalación de WordPress. Sin embargo, quiero tanto la imagen en escala de grises como la imagen en color en mi sitio web (coloreada al pasar el mouse). La forma en que intenté hacer esto fue crear un montón de add_image_size () así:
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
Y luego haría un filtro en las imágenes y solo tomaría las ID de escala de grises * y las guardaría:
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;
}
Funcionaría bien, pero aparentemente add_image_size () analiza los argumentos de ancho y alto y cuando un tamaño ya está definido con esa combinación, el tamaño no se agrega. Puedo entender eso, ya que la función es agregar nuevos tamaños, y si el tamaño es un duplicado, normalmente es mejor no agregarlo nuevamente para ahorrar tiempo de procesamiento. Pero ahora quiero dos imágenes con el mismo tamaño, pero una con un filtro aplicado y la otra con el original.
¿Cómo puedo conseguir esto?
Intenté agregar otro tamaño que es solo un píxel más ancho, como:
add_image_size( 'gho-small-grayscale', 101, 0, true ); // Used for small grayscaled images
Y luego cambiar el tamaño de la imagen más tarde después de que el filtro vuelva a 100/200/400
lo que sea. Pero no se siente bien, y también desordena las get_the_post_thumbnail()
llamadas, ya que todavía cree que la dimensión de la imagen es 101x$height
. Tampoco es tan simple como cambiar el tamaño de la imagen en un píxel horizontal y verticalmente, ya que las proporciones podrían hacer que la altura sea > 1px
más alta cuando tiene un ancho + 1px.