2018/07/13(金) [n年前の日記]
#1 [ruby] Rubyで画像ファイルの破損チェックをしてみたり
破損してる画像ファイルを調べるツールは無いのかなとググってみたけど見つからず。ただ、Rubyを使って簡易的に破損してるか調べる事例を見かけたわけで。
_Rubyで画像ファイルが破損していないかチェックする - craftoneの日記
ありがたや。コレを利用させてもらおう…。
ファイル、またはフォルダのパスを与えたら、件の関数に渡して結果を表示するスクリプトを書いてみたり。
手元のHDD内のファイルに対して試してみたら、破損してる画像がいくつか見つかった。イイ感じ。
常用してる2画面ファイラー、 _あふ から呼び出して使うことにした。あふ用のメニューファイルに以下を追加。
_Rubyで画像ファイルが破損していないかチェックする - craftoneの日記
ありがたや。コレを利用させてもらおう…。
ファイル、またはフォルダのパスを与えたら、件の関数に渡して結果を表示するスクリプトを書いてみたり。
# usage : ruby checkimage.rb IMAGE_FILE
# ruby checkimage.rb DIR
DUMP_NORMAL = false
$err_count = 0
#
# 前述のページのソースをここにコピペ
#
def check_and_output(path)
if FileTest.directory?(path)
pathlist = []
Dir::entries(path).each do |lpath|
next if lpath =~ /^\.{1,2}$/
lpath = path + "/" + lpath
check_and_output(lpath)
end
elsif FileTest.file?(path)
return unless path =~ /\.(gif|jpg|png)$/
result = check_file(path)
lpath = File.basename(path)
if result[0] == :unknown
puts "unknown : #{lpath}"
elsif result[1] == :damaged
puts "corrupted : #{lpath}"
$err_count += 1
elsif result[1] == :clean
puts "normal : #{lpath}" if DUMP_NORMAL
else
puts "illegal : #{lpath}"
end
else
puts "not found #{path}"
end
end
def hit_enter_key
puts "\nHit Enter Key"
s = STDIN.gets
end
def usage
puts "usage: ruby #{$0} IMAGE_FILE"
puts " ruby #{$0} DIR"
end
if $0 == __FILE__
if ARGV.size == 0
usage
else
ARGV.each do |path|
puts "check #{path}"
check_and_output(path)
end
puts "\ncorrupted : #{$err_count}"
end
hit_enter_key
exit(0)
end
手元のHDD内のファイルに対して試してみたら、破損してる画像がいくつか見つかった。イイ感じ。
常用してる2画面ファイラー、 _あふ から呼び出して使うことにした。あふ用のメニューファイルに以下を追加。
"Image file damage check" cmd.exe /c ruby checkimage.rb "$P"
- cmd.exe /c hoge で、DOS窓を開いて hoge を実行。
- 「"$P"」で、あふで開いてるフォルダのパスが渡される。
[ ツッコむ ]
以上です。