mieki256's diary



2018/07/13(金) [n年前の日記]

#1 [ruby] Rubyで画像ファイルの破損チェックをしてみたり

破損してる画像ファイルを調べるツールは無いのかなとググってみたけど見つからず。ただ、Rubyを使って簡易的に破損してるか調べる事例を見かけたわけで。

_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"

以上、1 日分です。

過去ログ表示

Prev - 2018/07 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project