2016-05-26 81 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

    相关问题