几次随着时间的推移,我改变大小的缩略图WP生成时,图片上传,总是设置更大的大小。
最近,我设置了缩略图宽度600 Max宽度和中型最大宽度1800 Max。上传了几百张图片后,我意识到我需要设置更小的图像大小,我将中等大小的图片从1800 to减少到1500 to,以便将来上传。
我知道,已经上传的图像将停留在磁盘上的更大的分辨率,这是好的,我不需要使用任何插件来重新生成拇指。
问题:
Word Press现在显示,以前上传的图像的大小也是1500 an宽度,甚至实际大小也是1800 an(例如,它显示1500 px1000 an表示图像,即1800 px1200px)。
我在Dashboard > Settings > 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如何获得已经上传的图片的真实图像维数,哪些尺寸比媒体设置中的一个要大?
发布于 2021-05-16 13:50:53
如何获得已经上传的图片的真实图像维数,这些图像的维数比media设置的中设置的图像要大?
(注意:我添加了上面的斜体和粗体格式。)
wp_get_attachment_image_src()实际上不一定返回调整大小的图像文件的实际宽度和高度,该函数依赖于通过媒体设置屏幕设置的特定图像大小的最大宽度和高度(请参见wp-管理→设置→媒体)。
样本测试用例:
foo-image.jpg),中等图像大小的最大宽度为300 max(默认宽度)。因此,WordPress保存了原始图像文件并生成了几个缩略图,而对于中等大小的缩略图,实际尺寸为300 is×225 is,命名为foo-image-300x225.jpg。wp_get_attachment_image_src()返回300 (宽度)和225 (高度),这是实际的维度。wp_get_attachment_image_src()返回200 (宽度)和150 (高度)。这并不是真的错,但这并不是实际缩略图的实际尺寸。所以,之所以如此,是因为wp_get_attachment_image_src()使用image_downsize(),它使用image_constrain_size_for_editor(),它缩小图像的实际/默认大小,并返回“错误”图像维度(在您的情况下为1500 in×1000 in,在上述测试用例中为200 in×150 in)。
但请记住,WordPress执行缩放是有一个很好的理由的--“这是为了使图像更适合编辑和主题。”--从image_constrain_size_for_editor()'s函数引用中复制而来。
因此,如果您想检索保存在后置元数据中的实际维度(请参阅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参数可以是分别具有宽度和高度的数组。如果大小匹配“大小”元数据数组的宽度和高度,那么它将被使用。如果没有直接匹配,那么将使用比指定大小更接近的图像大小<#>larger。
发布于 2021-05-15 13:30:38
img标记上的宽度和高度属性并不能告诉浏览器图像文件有多大(内部大小),而是告诉浏览器页面上的img标记DOM节点有多大,这样它就可以在文件加载之前布局页面,并避免重新计算页面布局的开销。事实上,有时不匹配是可取的,例如视网膜图像有两倍大小的img标签的宽度和高度,有时甚至更多。
当代码指定medium大小时,您描述的是预期的和最优的行为。WP将使用同样大或大的最小尺寸。这避免了升级。
If您希望它使用上传图像的内部大小/原始大小,或者使用确切的图像尺寸,然后您需要使用full图像大小,或者使用WP或插件重新生成图像。
如果您使用的是wp_get_attachment_image,则会添加响应性图像属性,允许浏览器相应地调整大小。您甚至可以传递一个宽度和高度数组,而不是medium,例如[1500, 1000]。
https://wordpress.stackexchange.com/questions/388220
复制相似问题