2016-05-26 36 views
-1

我想在Linux機器上用Ruby生成縮略圖。查找特定文件並重命名它的Ruby代碼不起作用?

這個過程包括確定已經生成的5個縮略圖中哪一個最有意義(通過有意義的,在這裏,我打算選擇最大尺寸的縮略圖,因爲更大的尺寸意味着更多細節)。

之後我去把最大尺寸的文件重命名爲通用名稱,以便以後使用它。代碼似乎不適合我,我不明白原因,有沒有改善它的建議?

預先感謝您。

這裏是我的代碼:

對於您可能需要,可變thumb_dir包含了我們所得到的縮略圖,從目錄的路徑。

max = File.size("#{thumb_dir}/thumb01.jpg").to_f # 
name = "thumb01.jpg" 

for i in 2..5 
    if max < File.size("#{thumb_dir}/thumb0'"#{i}"'.jpg").to_f? 
    max = File.size("#{thumb_dir}/thumb0'"{i}"'.jpg" 
    name = "thumb0" + "#{i}" + ".jpg" 
    end 
end 

File.rename("#{thumb_dir}/#{name}", "thumbnail.jpg") ` 
+0

那裏有一些相當粗糙的語法錯誤。你確定這是你的代碼嗎? – tadman

+0

是的,這是我的,我是一個初學者,所以會有明顯的錯誤... – MrRobot

+0

通常這是一個好主意,它至少運行時沒有語法錯誤,當試圖解決問題。該代碼中存在很多混亂。與編程中的任何事情一樣,注意細節也很重要。 – tadman

回答

1
i = (1..5).map {|i| File.size("#{thumb_dir}/thumb#{i}.jpg").to_f }.each_with_index.max[1] 

File.rename("#{thumb_dir}/thumb#{i + 1}.jpg", "thumbnail.jpg") 

它是做什麼的?

  1. (1..5).map {|i| File.size("#{thumb_dir}/thumb#{i}.jpg").to_f }

我們得到的文件大小的數組thumb1.jpg高達thumb5.jpg

  • array.each_with_index.max[1]
  • 二手得到數組最大值的索引。

  • File.rename("#{thumb_dir}/thumb#{i+1}.jpg", "thumbnail.jpg")
  • 現在我們知道,i是陣列中的最大的值的索引,然後thumb#{(i+1)}.jpg是具有最大尺寸的文件,所以這是該一個我們想替換的名字。

    +0

    謝謝,這是最接近我的代碼,並理解它,它似乎很順利,尤其是與你的提示。 – MrRobot

    0

    請記住,在Ruby中有一個在Enumerable了一些有用的方法,可以使這樣的事情很簡單:

    # Expand to a list of possible thumbnail paths 
    thumbnails = (2..5).map { |n| '%s/thumb%02d.jpg' % [ thumb_dir, n ] } 
    
    # Find the biggest thumbnail by... 
    biggest_thumbnail = thumbnails.select do |path| 
        # ...only dealing with those files that exist... 
        File.exist?(path) 
    end.max_by do |path| 
        # ...and looking for the one with the maximum size. 
        File.size(path) 
    end 
    

    如果存在的話應該返回的最大文件。如果沒有,你會得到nil

    你可以用它來命名:

    if (biggest_thumbnail) 
        File.rename(biggest_thumbnail, 'thumbnail.jpg') 
    end 
    

    你會想發動它是這樣說可能會刪除一堆文件之前備份原始圖像。

    +0

    你能否給我的代碼添加一些評論和細節?我無法理解它...或者如果你願意的話,只要糾正我的代碼,那會更好,因爲我寫了它,我明白了,就像我說的,是一個初學者。 – MrRobot

    +0

    @MrRobot在這裏增加了一些評論,但真正的理解來自在irb中試驗這個或者看看這些部件是如何工作的。每一步都做了一件非常具體的事情。 – tadman

    相關問題