Answers:
似乎答案是否定的 ...
我遵循了核心功能,发现死路一条。并找到了这篇文章(如何从顶部裁剪add_image_size()?),Rarst说:
中间图像生成极其严格。Image_resize()使它接近代码,并且完全没有钩子。
但是,根据其他答案的答案(来自bradt)和他发布的代码(WordPress中的Image Crop Position),我想我明白了:)
在函数中bt_generate_attachment_metadata
,我刚刚修改了调用以bt_image_make_intermediate_size
包括最后一个参数$size
$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );
并修改了函数的开头,bt_image_make_intermediate_size
如下所示:
$size
参数添加到函数null
值$suffix
,这switch
是我们新后缀的function bt_image_make_intermediate_size( $file, $width, $height, $crop = false, $size ) {
if ( $width || $height ) {
switch($size) {
case 'thumbnail':
$suffix = 't';
break;
case 'medium':
$suffix = 'm';
break;
case 'large':
$suffix = 'l';
break;
default:
$suffix = null;
break;
}
$resized_file = bt_image_resize( $file, $width, $height, $crop, $suffix, null, 90 );
在这里,我的mod的完整代码的副本,仅供参考。
和diff相比原来的。
很可能,所有代码都可以精简,但是通过这种方式,我们获得了自定义裁剪图像的好处:))
您可以使用过滤器image_make_intermediate_size,但是您必须根据获得的$ filename来确定要将中间文件更改为哪个名称(然后重命名该文件,因为此时已经生成了该文件)。
我只为“缩略图”生成一个中间尺寸的图像,所以就这么简单:
add_filter( 'image_make_intermediate_size', function( $filename ) {
// old 2017_234783843-100x100.jpg
$old = $filename;
// new 2017_234783843-thumbnail.jpg
$new = preg_replace("/(\d+_\d+)-\d+x\d+\.(.*)/i", "$1-thumbnail.$2", $old );
rename($old, $new);
return $new;
} );
"/(.*)-\d+x\d+\.(.*)/i"