如何使用ADD_IMAGE_SIZE添加相同大小的多个图像大小

时间:2012-05-09 作者:Coen

我在WordPress安装中对所有上传的图像使用灰度过滤器。然而,我希望在我的网站中同时显示灰度图像和彩色图像(悬停时着色)。我尝试这样做的方式是创建一组add\\u image\\u size()\'s,如下所示:

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
然后我会对图像进行过滤,只提取*-灰度ID并保存它们:

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\\u image\\u size()显然会查看width和height参数,如果已经用该组合定义了大小,则不会添加该大小。我可以理解,因为功能是添加新尺寸,如果尺寸是重复的,通常最好不要再添加,以节省处理时间。但现在我想要两幅大小相同的图像,但一幅应用了过滤器,另一幅是原始图像。

我怎样才能做到这一点?

我尝试添加另一个仅宽一个像素的尺寸,如:

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倍时更高。

1 个回复
最合适的回答,由SO网友:Coen 整理而成

哎呀,我一直在解决我自己的问题。下面是我最后是如何解决的。我发现add\\u image\\u size并没有忽略图像大小的相同维度,而是将文件名指向uploads dir中的同一个文件。一旦我知道了这一点,我就可以用另一个名称保存灰度图像,将该名称返回到挂钩中的$元数组,WP将其作为信息存储在数据库中。所有get\\u thumbnail()函数仍在正常工作,我可以请求-grayscale ID。

add_filter(\'wp_generate_attachment_metadata\',\'gholumns_grayscale_filter\');
function gholumns_grayscale_filter($meta)
{
$file = $meta[\'sizes\'][\'gho-large-grayscale\'][\'file\'];
$meta[\'sizes\'][\'gho-large-grayscale\'][\'file\'] = do_grayscale_filter($file);
//do_resize($file, -1, -1); # No longer necessary!
$file = $meta[\'sizes\'][\'gho-medium-grayscale\'][\'file\'];
$meta[\'sizes\'][\'gho-medium-grayscale\'][\'file\'] = do_grayscale_filter($file);
//do_resize($file, -1, -1); # No longer necessary!
$file = $meta[\'sizes\'][\'gho-small-grayscale\'][\'file\'];
$meta[\'sizes\'][\'gho-small-grayscale\'][\'file\'] = do_grayscale_filter($file);
//do_resize($file, -1, -1); # No longer necessary!
return $meta;
}


function do_grayscale_filter($file)
{
$dir = wp_upload_dir();
$image = wp_load_image(trailingslashit($dir[\'path\']).$file);
imagefilter($image, IMG_FILTER_GRAYSCALE);
return save_modified_image($image, $file, \'-grayscale\');
}

function save_modified_image($image, $filename, $suffix)
{
$dir = wp_upload_dir();
$dest = trailingslashit($dir[\'path\']).$filename;

list($orig_w, $orig_h, $orig_type) = @getimagesize($dest);

$filename = str_ireplace(array(\'.jpg\', \'.jpeg\', \'.gif\', \'.png\'), array($suffix.\'.jpg\', $suffix.\'.jpeg\', $suffix.\'.gif\', $suffix.\'.png\'), $filename);
$dest = trailingslashit($dir[\'path\']).$filename;

switch ($orig_type)
{
    case IMAGETYPE_GIF:
        imagegif( $image, $dest );
        break;
    case IMAGETYPE_PNG:
        imagepng( $image, $dest );
        break;
    case IMAGETYPE_JPEG:
        imagejpeg( $image, $dest );
        break;
}

return $filename;
}

结束

相关推荐

Pull images from the gallery

我正在构建一个模板,wordpress主要用作图像CMS,我从每篇文章的内容部分提取第一幅图像。<img src=\"<?php echo grab_image() ?>\" /> function grab_image() { global $post, $posts; $first_img = \'\'; ob_start(); ob_end_clean(); $output = preg_match_all(\'/&l