【问题标题】:Jekyll: Get width/height of an image without using an external pluginJekyll:在不使用外部插件的情况下获取图像的宽度/高度
【发布时间】:2018-11-14 22:34:24
【问题描述】:

我想为我的所有图像自动添加heightwidth 属性。这是通过this nice plugin 完美完成的,但我将我的网站托管在不支持外部插件的 GitHub 页面上。

问题:如何在不使用插件的情况下预填充图片的高/宽属性?

我为什么需要这个?

My site 即使没有 heightwidth 也能正常工作,但我想指定它们,因为从 SEO 的角度来看它很重要(您可以找到有关其重要性的一些详细信息 here)。

【问题讨论】:

  • “不支持外部插件的地方。”:这就是我最近推荐 Hugo 的原因:stackoverflow.com/a/53244761/6309
  • @VonC 谢谢,但正如我之前提到的,这不是我的选择。首先,我需要重新设计我的项目。其次,我需要更改托管,因为 GitHub 页面不支持 Hugo(我需要提交我不想要的预编译 html 文件)。最后,快速谷歌搜索显示没有用于heightwidth 计算的内置解决方案,所以我需要自己弄清楚。我不明白如何从使用 Hugo 中受益。如果我遗漏了什么,请解释一下。
  • 为什么需要计算宽度和高度。我从来不需要它们。我错过了什么吗?
  • 我仍然不清楚您的目标是什么...防止回流?这与 SEO 有什么关系?
  • 高度和宽度使初始布局更快(无需加载图像即可呈现),并且更容易使用 CSS 缩放图像。

标签: ruby jekyll github-pages


【解决方案1】:

使用fastimage gem 编写一个内部过滤器来执行此操作相当简单。您可以在项目的_plugins 目录中定义您的过滤器(这在Jekyll documentation 中有概述)

作为一个非常粗略的例子,你可以这样做:

require 'fastimage'

module ImageSizeFilter
  def image_size(source, dimension = nil)
    # Get the image dimensions, throw an error on failure
    # NOTE: You may want to sanitize the input string provided here
    # see: https://github.com/sdsykes/fastimage#security
    size = FastImage.size(source, raise_on_failure: true)

    # Return the requested dimension, or both dimensions if nothing was specified
    return size[0] if dimension == 'w'
    return size[1] if dimension == 'h'
    return size unless dimension

    # Fail if the requested dimension is invalid
    raise 'Invalid image size dimension requested: ' + dimension
  end
end

Liquid::Template.register_filter(ImageSizeFilter)

这样使用:

<img src={{source}}
     width="{{source | image_size: 'w'}}"
     height="{{source | image_size: 'h'}}"/>

当然,这仍然不能直接用于 GitHub 页面,因为不支持自定义插件。一般来说,要使用自定义插件,一种解决方案是build the site locally and include it in the repository

【讨论】:

    【解决方案2】:

    这个问题似乎适用于降价文件中的内容图像。这些图像默认没有设置宽度或高度。


    简短回答

    您可以直接在 HTML 中的 markdown 中设置宽度和高度,如下所示:

    # Markdown title
    
    paragraph
    
    <img src="/path/to/image.jpg" width="400" height="300" />
    

    长答案

    如果没有插件,您无法以编程方式检索图像的宽度和高度,因此当您使用(纯)降价时,您会得到一个没有宽度和高度属性的图像。问题是您为什么要首先添加宽度和高度。设置宽度和高度可以防止回流,但在加载时会留下一个大的缺口。那真的更好吗?它当然不好看。渐进式 JPG 是解决这个问题的一个很好的解决方案,但我不喜欢在它们上设置宽度和高度,因为“无图像”看起来不错,而渐进式 JPG 也总是看起来不错。

    你说你想要它是出于 SEO 的原因,但我想不出。

    如果您的网站速度太慢,您实际上想在重排之前与图片下方的内容进行交互,那么合乎逻辑的解决方案是让您的网站加载得更快。

    但是,如果您的用户连接速度非常慢,您可能需要手动将图像添加到 HTML 中的降价中。请参阅代码示例的简短答案。

    【讨论】:

    • 是的,是的...缺少 alt 属性...但为了简洁起见,这是故意这样做的。
    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 2014-09-13
    • 2016-10-09
    • 2010-12-19
    • 1970-01-01
    • 2013-03-16
    • 2011-03-21
    • 1970-01-01
    相关资源
    最近更新 更多