我正在尝试使用Ruby在Linux机器上生成缩略图。
该过程包括确定已经生成的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 :(得分:1)
-gravity center
它做了什么?
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")
我们获得了thumb1.jpg的文件大小数组,最高可达thumb5.jpg
(1..5).map {|i| File.size("#{thumb_dir}/thumb#{i}.jpg").to_f }
用于获取数组最大值的索引。
array.each_with_index.max[1]
现在我们知道i是数组中最大值的索引,那么File.rename("#{thumb_dir}/thumb#{i+1}.jpg", "thumbnail.jpg")
是具有最大大小的文件,因此我们想要替换名称。
答案 1 :(得分: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
您需要备份原始图像,然后才能释放出可能会删除大量文件的内容。