如何在不扭曲的情况下将图像放大为缩略图?

时间:2014-12-27 作者:Otavio Vidal

我的单篇文章页面中有一个部分包含文章缩略图。当使用较小的图像作为特征图像(在宽度或高度上小于缩略图大小)时,它会扭曲以填充缩略图并失去其比例。当特征图像大于缩略图大小或至少具有相似的比例时,它似乎工作得很好。

显示案例的图像:http://i.imgur.com/XtdpuyV.jpg

以下是我使用的所有代码:

add_image_size( \'thumbpost\', 698, 320, true );

<div class="thumbpost"><?php { the_post_thumbnail(\'thumbpost\' ); } ?></div>

.thumbpost{
  width:100%;
  height:320px;
  overflow:hidden;
}

.thumbpost img{
  width:100%;
  height:100%;
}
Wordpress生成一个保持原始宽度的图像,该宽度小于我想要的缩略图宽度

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

你遇到的核心问题是,WordPress实际上并没有对你的图像做任何事情,因为它并没有放大图像。您可以使用钩子来修改WordPress的行为,而无需对核心进行黑客攻击,也可以尝试使用CSS修复该问题。

将WordPress更改为高档缩略图

ALXMedia has an useful example 添加此行为时。摘录如下。

// Upscale thumbnails when the source image is smaller than the thumbnail size. Retain the aspect ratio.
function alx_thumbnail_upscale( $default, $orig_w, $orig_h, $new_w, $new_h, $crop ){
    if ( !$crop ) return null; // let the wordpress default function handle this

    $aspect_ratio = $orig_w / $orig_h;
    $size_ratio = max($new_w / $orig_w, $new_h / $orig_h);

    $crop_w = round($new_w / $size_ratio);
    $crop_h = round($new_h / $size_ratio);

    $s_x = floor( ($orig_w - $crop_w) / 2 );
    $s_y = floor( ($orig_h - $crop_h) / 2 );

    return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );
}
add_filter( \'image_resize_dimensions\', \'alx_thumbnail_upscale\', 10, 6 );
CSS中的问题是,与容器相比,您的图像具有不同的比例(因为它既不放大也不裁剪),并且您将高度和宽度都设置为100%。您应该做的是将其中一个尺寸设置为100%(本例中的宽度),另一个设置为自动。假设要模拟裁剪,可以将父div上的溢出设置为隐藏,以便裁剪它。但是,这只会裁剪底部,因此您需要使用边距或其他定位技巧,使其看起来像居中裁剪。

下面是一个正确css的示例:

.thumbpost{
    width:100%;
    height:320px;
    overflow:hidden;
}

.thumbpost img{
    width:100%;
    height:auto;
}

结束

相关推荐

the post thumbnail, scale

我想知道如何将\\u post\\u缩略图缩放到特定的宽度?你们能帮忙吗?目前我正在使用<?php //Resize post thumbnail $thumbnail = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), \'single-post-thumbnail\' ); $thumbnailHeight = $thumbnail[1]