Ruby Jekyll-从Liquid访问插件对象
我有一个图像列表,我在上面运行Ruby Jekyll-从Liquid访问插件对象,ruby,jekyll,liquid,Ruby,Jekyll,Liquid,我有一个图像列表,我在上面运行mini_exiftool从图像中提取各种属性(EXIF&IPTC)。我已成功创建LiquidTag。它接受我想要的路径和EXIF属性,并将其作为字符串返回(我假设是字符串) 但是,mini_exiftool速度很慢。目前,我在每个图像中插入标记多次。我希望每个图像运行一次,并将所有数据(数组?对象?)存储在一个变量中。小免责声明-我几乎不知道任何Ruby,除了我在试图理解这个问题时学到的东西 以下是我使用插件的方式: {% exif path, title %}
mini_exiftool
从图像中提取各种属性(EXIF&IPTC)。我已成功创建LiquidTag。它接受我想要的路径和EXIF属性,并将其作为字符串返回(我假设是字符串)
但是,mini_exiftool
速度很慢。目前,我在每个图像中插入标记多次。我希望每个图像运行一次,并将所有数据(数组?对象?)存储在一个变量中。小免责声明-我几乎不知道任何Ruby,除了我在试图理解这个问题时学到的东西
以下是我使用插件的方式:
{% exif path, title %}
{% exif path, lens %}
这就是插件,一个在线猜测和代码的大杂烩:
require 'mini_exiftool'
module Jekyll
class Exif < Liquid::Tag
def initialize(tag_name, params, token)
super
args = params.split(",").map(&:strip)
@filename = args[0]
@property = args[1]
end
def lookup(context, name)
lookup = context
name.split(".").each { |value| lookup = lookup[value] }
lookup
end
def render(context)
path = lookup(context, @filename)
exif = MiniExiftool.new(path)
return exif[@property]
end
end
end
Liquid::Template.register_tag('exif', Jekyll::Exif)
需要“mini_exiftool”
杰基尔模块
类Exif
从您对插件的描述来看,我想说它符合您的要求。插件从(照片?)返回特定属性,并以字符串形式返回
但听起来你只想把它保存一次,然后把它存放在别的地方。在这种情况下,你可能会考虑做一些不同的事情。特别是当你说属性读取缓慢时
在示例中,您可以使用生成器根据运行前的所有图像创建所需的数据。发电机详情:
您可以采用与我类似的方法对语言进行排序:
class Generator < Jekyll::Generator
def generate(site)
site.data['news-en'] = Array.new
# Do something with exif and push a value object:
site.data['news-en'].push(p)
类生成器
def生成(站点)
site.data['news-en']=Array.new
#使用exif执行某些操作并推送值对象:
site.data['news-en'].push(p)
然后,这些数据在站点数据对象中可用。可通过以下方式访问:
{%用于站点中的帖子。数据['news-en']%}
请参见此处的数据文件文档:
然而,如果你真的没有一直添加大量照片,而是定期更新其他文字帖子,那么你甚至可能想离开Jekyll,使用Gulp/Grunt或类似工具生成数据文件
如果我答错了您的问题,请告诉我,我会相应地更新我的答案。谢谢您的回复!我会仔细阅读发电机,我想这可能会解决我的问题。我更新了我的问题,有点不清楚,你在大多数情况下都猜对了很高兴听到这个消息,亨里克。如果你对Jekyll有更深的兴趣,我现在会做一些无耻的自我宣传,并给你我目前正在做的一个图书项目的链接(当我有时间:-):因为我已经在使用shell脚本来处理文件,所以我能够在那里添加一个额外的exiftool调用,并将其输出到一个JSON数据文件。如果我在jekyll运行时需要数据,我会使用生成器。现在我有了所有的数据和零开销。干杯听起来不错,亨里克。很高兴你解决了。也谢谢你接受答案!