Я использую фильтр оттенков серого на всех загруженных изображениях в моей установке WordPress. Однако я хочу, чтобы серое масштабированное изображение и цветное изображение были на моем сайте (цветные при наведении). Я попытался сделать это, создав группу add_image_size () примерно так:
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
И тогда я бы сделал фильтр на изображениях и взял бы только идентификаторы *-оттенков серого и сохранил их:
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;
}
Это будет работать нормально, но, очевидно, add_image_size () просматривает аргументы ширины и высоты, и когда размер уже определен с этой комбинацией, размер не добавляется. Я понимаю, что, поскольку функция заключается в добавлении новых размеров, а если размер является дубликатом, обычно лучше не добавлять его снова, чтобы сэкономить время обработки. Но теперь я хочу два изображения одинакового размера, но одно с фильтром, а другое с оригиналом.
Как мне этого добиться?
Я попытался добавить другой размер, который всего на один пиксель шире, например:
add_image_size( 'gho-small-grayscale', 101, 0, true ); // Used for small grayscaled images
И затем изменение размера изображения после фильтра обратно к 100/200/400
чему угодно. Но это не кажется правильным, и это также портит get_the_post_thumbnail()
вызовы, поскольку все еще думают, что измерение изображения является 101x$height
. Это также не так просто, как изменение размера изображения на один пиксель по горизонтали и вертикали, так как из-за соотношения высота может быть > 1px
выше, если у вас ширина + 1 пиксель.
Ответы:
Ну и дела, я продолжаю решать свои собственные проблемы все время. Вот как я решил это в конце. Я обнаружил, что add_image_size не игнорирует идентичные размеры размера изображения, а вместо этого указывает имя файла на тот же файл в каталоге загрузок. Узнав об этом, я мог просто сохранить изображение в градациях серого под другим именем, вернуть это имя в массив $ meta в моем хуке, и WP использует его как информацию для хранения в базе данных. Все функции get_thumbnail () по-прежнему работают так, как должны, и я могу просто запросить идентификатор -grayscale ID.
источник