自定义图像尺寸/缩略图-即使源图像小于设置尺寸,也可以裁切宽高比


11

通常,当您使用硬裁剪设置自定义图像尺寸时-例如add_image_size( 'custom-size', 400, 400, true );-您会得到以下结果:

  • #1上传的图片:600x500>缩略图:400x400。
  • #2上传的图片:500x300>缩略图:400x300。
  • #3上传的图片:300x200>缩略图:300x200。

但是我想做的是当上传的图像小于自定义图像尺寸的设置宽度或高度,或两者都小于时,例如上面的示例2和#3-而不是仅裁剪图像以适合在这些尺寸范围内-也会进行裁剪以匹配其长宽比(在这种情况下为1:1),如下所示:

  • #1上传的图片:600x500>缩略图:400x400。
  • #2上传的图片:500x300>缩略图:300x300
  • #3上传的图片:300x200>缩略图:200x200

我不相信使用标准的add_image_size选项是可行的,但是可以使用其他函数还是修改add_image_size函数的钩子呢?

还是有添加此功能的插件?

任何人都可以提供的任何信息将不胜感激。


为了进一步阐明我的问题。我希望能够进行配置add_image_size以完成上述操作。我相当确定使用标准参数是不可能的,但是我希望可以使用钩子,动作或过滤器来实现。
乔伊·乔·乔青年沙巴杜

Answers:


2

您说对了,就是行不通。

如果可以反过来考虑您的问题,则可以通过选择图像大小和响应图像在现代浏览器中获得正确的结果。

如果您使用如下代码:

add_image_size( 'custom-size-small', 200, 200, true );
add_image_size( 'custom-size-medium', 300, 300, true );
add_image_size( 'custom-size-large', 400, 400, true );

...,并且在您的模板中类似:

wp_get_attachment_image( $image_ID, 'custom-size-small' )

...然后默认情况下(WP 4.4及更高版本),您将获得一个图像标签,该标签的集合中包含的版本最小,src并且srcset属性中的尺寸较大,较新的浏览器将从中选择并显示最大的适当版本。

因此,如果特定的图像没有较大的版本,那就没关系了。300x200200x200制作一个版本的图像,该版本将是HTML中唯一的版本,并且所有浏览器都将显示该版本。

我在调整响应图像时解决了这一问题,以便在仅支持src而不支持的浏览器上获得良好的性能srcset


谢谢回复。这是一个有趣的解决方案,但不幸的是,我认为这不适用于我的情况。图像将由最终用户上传-可以是任意大小。除非引起我的误解,否则此解决方案仅在上传的图像具有固定尺寸的情况下才有效。例如,上面的代码适用于500x200的图像,但不适用于500x199的图像。
乔伊·乔·乔青年沙巴杜

2

这不是一个很好的解决方案,因为它是一个较新的CSS解决方案,并且只能在78.9%的用户浏览器中使用,但是有一些polyfill可以克服对象匹配图像fitie

img {
    display: block;
    overflow: hidden;
    width: 400px;
    height: 400px;
    -o-object-fit: cover;
       object-fit: cover;
}

理想情况下,如果较小的图像在上载时按比例缩放会更好,但是我还无法找到解决方案。


谢谢回复。我什至都不知道此属性,但是是的,就像您说的那样,缺少浏览器支持使它无法使用。也许从现在起几年后。
乔伊·乔·乔青年沙巴杜

我实际上刚刚开始使用“对象适合图像” polyfill,虽然它看起来可以正常工作,但乔伊(Joey)实际上还没有在IE上进行过测试,因为我只有Mac。如果您想看一下,这里确实起作用。该页面的网格缩略图上正在使用它。我知道那里必须有一个插件可以解决这个问题。但是,到目前为止,YoImages是对象拟合的一个很好的附带插件,因为它可以让您将裁剪位置更改为每个图像的任何位置。
布莱恩·威利斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.