为与缩略图大小相同的图像生成缩略图

时间:2017-02-15 作者:Johansson

我注意到,如果上传的图像大小与缩略图大小相同,WordPress不会为图像生成缩略图。

为了说明这一点,以下是一个例子:

我有一张尺寸为300x200px. 我的缩略图在WordPress设置中的大小也是300x200. 所以,当我上传这张图片时,没有缩略图300x200 将生成大小,因为上载的图像itself 被认为是WordPress的缩略图!

我查到了wp_generate_attachment_metadata() 函数,如果图像大小等于缩略图大小,则决定不裁剪图像。Here 是指向此函数内容的链接。

此函数有一个过滤器,如下所示:

apply_filters( \'wp_generate_attachment_metadata\', $metadata, $attachment_id );

如何使用此函数生成缩略图,无论大小如何?

谢谢

UPDATE 1:

根据@birgire的回答,我已经加入了我的习惯multi_resize() 问题中的功能:

function multi_resize($sizes) {
    $sizes = parent::multi_resize($sizes);

    //we add the slug to the file path
    foreach ($sizes as $slug => $data) {
        $sizes[$slug][\'file\'] = $slug . "/" . $data[\'file\'];
    }

    return $sizes;
}
我将此函数用于其他目的this 问题

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

如果我正确理解了问题,您希望生成

test.jpg
test-150x150.jpg
而不仅仅是:

test.jpg
上载名为test.jpg, 大小为150x150,与缩略图大小相同。(我在这里使用了150x150的尺寸,而不是300x200的尺寸,以避免与中等尺寸混淆)

此限制在multi_resize() 图像编辑器类的方法,如WP_Image_Editor_ImagickWP_Image_Editor_GD 那个延伸WP_Image_Editor:

$duplicate = ( ( $orig_size[\'width\'] == $size_data[\'width\'] ) 
    && ( $orig_size[\'height\'] == $size_data[\'height\'] ) );
如果大小与原始图像的大小相同,则不会生成该图像。

一种可能的解决方法是根据需要扩展image类,并通过wp_image_editors 滤器

或者,您可以尝试连接到wp_generate_attachment_metadata 要在图像编辑器的帮助下生成缺少的副本,如save() 方法

SO网友:MR0

为了解决这个问题,我在函数中创建了一个自定义行为。php仅限于尚未创建缩略图,且图像大小相同。正如@JackJohansson所解释的,该函数在wp\\u generate\\u attachment\\u元数据过滤器中工作。

add_filter(\'wp_generate_attachment_metadata\', \'same_size_image\');

function same_size_image($meta){
  global $_wp_additional_image_sizes;

  $file = wp_upload_dir();
  $file = trailingslashit($file[\'basedir\']).$meta[\'file\'];
  $info = getimagesize($file);
  $image = wp_get_image_editor($file);

  foreach ($_wp_additional_image_sizes as $label => $op) {
    if (!isset($meta[\'sizes\'][$label])) {
        $width = $op[\'width\'];
        $height = $op[\'height\'];
        $new_file_path = preg_replace(\'/\\.(.+$)/\', \'-\'.$width.\'x\'.$height.".$1", $file);
        if ($info[0] == $width) $image->save($new_file_path);
    }
  }

  return $meta;
}

SO网友:Jeff82

Wordpress应该在上传到媒体库时自动创建所有指定大小的图像。“指定”是指父主题和/或子主题提供的尺寸,包括:

add_image_size(\'name\', 320, 200);
。。以及任何WP默认值。以上只是为WP创建图像导数的一个简单示例。如果希望它每次都创建指定大小的缩略图,可以在函数中调用它。php(或主题调用的包含文件)。

您是在寻找特定的尺寸,还是只需要100x100的默认尺寸?

SO网友:Kazem Nocktrine

您好,我不确定这是您要找的,但我认为这会有所帮助

add_image_size( \'thumbnail\', \'100px\', \'100px\', true );

使用其中一个trueFALSE 语句来清除是否调整图像大小,上述代码将生成几乎完全为100px x 100px的图像。对于所有图像,css上都需要有多么小的漫游。

相关推荐