WP显示错误的图像尺寸

时间:2021-05-15 作者:Advanced SEO

随着时间的推移,我多次更改上传图像时WP生成的缩略图的大小,总是设置更大的大小。

最近,我设置缩略图宽度600px宽度和中等大小最大宽度1800px。上传了数百张图像后,我意识到我需要设置较小的图像大小,我将中等大小从1800px减少到1500px,以便将来上传。

我知道已经上传的图像将以更高的分辨率保存在磁盘上,这对我来说很好,我不需要再使用任何插件来重新生成拇指。

问题:

Word Press现在显示之前上载的图像的大小也是1500px宽度,甚至实际大小也是1800px(例如,对于1800px x 1200px的图像,它显示1500px x 1000px)。

我在仪表板中更改了几次未来图像的宽度>;设置(>);Media和我发现,如果已经上传的图像的真实尺寸大于媒体设置中现在设置的尺寸,WP会说这些图像的宽度是媒体设置中设置的宽度,即使真实尺寸更大。

您可以在此处看到截图示例:https://postimg.cc/fScS3WKH

这是我用来获取图像及其尺寸的代码。

$medium_image_url = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), \'medium\'); // Featured image medium size

// To show image dimensions   
echo $medium_image_url[1]; // Show width
echo $medium_image_url[2]; // Show height
如何获取已上传图像的真实图像维度,哪些维度大于媒体设置中现在设置的维度?

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

如何获取已上传图像的真实图像维度,其中维度大于当前设置的维度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 将使用指定的大小

SO网友:Tom J Nowell

上的宽度和高度属性img 标签不是告诉浏览器图像文件有多大(固有大小),而是告诉浏览器img 标记DOM节点将位于页面上,以便它可以在加载文件之前布局页面,并避免昂贵的页面布局重新计算。事实上,有时不匹配是可取的,例如,视网膜图像的大小是其img 标签宽度和高度,有时甚至更高。

您所描述的是预期的最佳行为,因为代码指定了medium 大小WP将使用同样大或更大的最小尺寸。这样可以避免扩大规模。

If you want it to use the intrinsic size/original size of the uploaded image, 或者要使用精确的图像尺寸,则需要使用full 图像大小,或使用WP CLI或插件重新生成图像。

如果您使用wp_get_attachment_image 您将添加响应图像属性,允许浏览器相应地调整大小。你甚至可以通过一个宽度和高度的数组,而不是medium e、 g。[1500, 1000].

相关推荐

已在管理源中发送警告的标头为media.php 3140

经过多年的良好运行,我在更新到5.42后突然收到了这个可怕的消息。但是,它只在管理员中发生:Warning: strpos() expects parameter 1 to be string, array given in Warning/home/content/55/html/example/wp-includes/media.php on line 3141 Warning: Cannot modify header information - headers already s