2017-04-10 63 views
0

我有一個圖像列表,我運行mini_exiftool從圖像中提取各種屬性(EXIF & IPTC)。我已經成功創建了一個LiquidTag。它接受路徑和我想要的EXIF屬性,並返回(我認爲是)字符串。Jekyll - 訪問液體的插件對象

但是,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) 

回答

1

從你如何描述的插件,我會說它做你想要的。該插件從(照片?)返回特定屬性並將其作爲字符串返回。

但它聽起來像你只想一次,並將它存儲在別的地方。在這種情況下,你可能想考慮做一點不同。當你說酒店的閱讀速度很慢時。

您可以在示例中使用生成器根據運行前的所有圖像創建所需的數據。在發電機組詳細信息:http://jekyllrb.com/docs/plugins/#generators

你可以有類似的做法像我有排序的語言:

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) 

的數據會在您的網站的數據對象可用。

{% for post in site.data['news-en'] %}

請參閱數據文件在這裏文檔:它可以像訪問http://jekyllrb.com/docs/datafiles/

但是,如果你真的不增添了不少的照片所有的時間,但更新您的其他文本的帖子定期時間表,你可能想要移出Jekyll並使用Gulp/Grunt或類似的工具來生成數據文件。

讓我知道如果我把你的問題弄錯了,我會相應地更新我的答案。

+0

感謝您的回覆!我會閱讀發電機,我認爲這可能會解決我的問題。我更新了我的問題,這個問題有點不清楚,你在大多數賬戶上都猜到了。 ;-) – Henrik

+0

很高興聽到Henrik。如果您對Jekyll有更深的興趣,我現在做一些無恥的自我推廣,並將這個鏈接提供給我正在編寫的書籍項目(當我有時間時:-)):https://www.jekyll.io – Christian

+0

由於我已經使用shell腳本來處理文件,因此我可以在exiftool中添加一個額外的調用並將其輸出到JSON數據文件。如果我在jekyll運行時需要數據,我會用一個發生器去掉。現在我擁有了所有的數據和零開銷。乾杯! – Henrik