如何获取已上传图像的真实图像维度,其中维度大于当前设置的维度media settings?
(注:斜体和bold以上格式是我添加的。)
wp_get_attachment_image_src()
实际上,不一定返回resized 该函数依赖于通过媒体设置屏幕设置的特定图像大小的最大宽度和高度(请参阅wp-admin → Settings → Media).
样本测试用例:
我上传了一张1600px×1199px的图像(我们称之为foo-image.jpg
), 中等图像大小的最大宽度为300px(默认值)。因此WordPress保存了原始图像文件并生成了几个缩略图,而对于中等大小的缩略图,实际尺寸为300px×225px,并命名为foo-image-300x225.jpg
.
和wp_get_attachment_image_src()
返回的300
(宽度)和225
(高度),即实际尺寸。
然后我将最大宽度(设置)从300px更改为200px。
然后wp_get_attachment_image_src()
返回的200
(宽度)和150
(高度)。
这实际上并没有错,但这不是实际缩略图的实际尺寸。
所以为什么会这样,是因为wp_get_attachment_image_src()
使用image_downsize()
其中使用image_constrain_size_for_editor()
该函数缩小图像的实际/默认大小,并返回;“错误”;图像尺寸(在您的情况下为1500px×1000px,在上述测试情况下为200px×150px)。
但请记住,WordPress执行缩放操作有一个很好的理由—“是的。”<这是为了使图像更适合编辑器和主题“S”复制自image_constrain_size_for_editor()
\'s函数参考。
因此,如果要检索保存在post元数据中的实际维度(请参见wp_get_attachment_metadata()
), 当然,你可以先使用wp_get_attachment_metadata()
和访问相关的数组项,但更简单的方法是使用image_get_intermediate_size()
— 此外,它还包括相对于上载目录的映像路径(wp-content/uploads
), 和完整图像URL:
$thumbnail_id = get_post_thumbnail_id( $post->ID );
$medium_image_data = image_get_intermediate_size( $thumbnail_id, \'medium\' );
var_dump( $medium_image_data[\'width\'], $medium_image_data[\'height\'], $medium_image_data[\'url\'] );
/* Sample output:
int(300)
int(225)
string(68) "https://example.com/wp-content/uploads/2021/05/foo-image-300x225.jpg"
*/
// Or using wp_get_attachment_metadata(), assuming that sizes.medium exists:
$image_metadata = wp_get_attachment_metadata( $thumbnail_id );
$medium_image_data = $image_metadata[\'sizes\'][\'medium\'];
var_dump( $medium_image_data[\'width\'], $medium_image_data[\'height\'] );
// here, $medium_image_data[\'url\'] is NULL (it\'s not set)!
但请注意
image_get_intermediate_size()
\'s函数引用表示:(为简洁起见,设置了格式,并且
$size
是函数的第二个参数)
这个$size
参数可以是分别具有宽度和高度的数组。如果大小与宽度和高度的“sizes”元数据数组匹配,则将使用它如果没有直接匹配,则使用最接近的图像大小larger than 将使用指定的大小