Class: ComicWalker::ItemDecoder
- Inherits:
-
Object
- Object
- ComicWalker::ItemDecoder
- Defined in:
- lib/comic_walker/item_decoder.rb,
lib/comic_walker/item_decoder/unknown.rb
Defined Under Namespace
Modules: Unknown
Instance Attribute Summary collapse
-
#pages ⇒ Object
readonly
Returns the value of attribute pages.
Instance Method Summary collapse
- #decode(file, dat_path, img_path, blob) ⇒ Object
- #decode_b64(file, dat_path, img_path, b64data) ⇒ Object
- #has_keys? ⇒ Boolean
-
#initialize(configuration_pack) ⇒ ItemDecoder
constructor
A new instance of ItemDecoder.
Constructor Details
#initialize(configuration_pack) ⇒ ItemDecoder
Returns a new instance of ItemDecoder.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/comic_walker/item_decoder.rb', line 8 def initialize(configuration_pack) fname = '0.dat' ct = configuration_pack['ct'] st = configuration_pack['st'] et = configuration_pack['et'] if ct && st && et @key1 = (ct + st + fname).unpack('C*') @key2 = (ct + fname + et).unpack('C*') @key3 = (fname + st + et).unpack('C*') end @pages = [] configuration_pack['configuration']['contents'].each do |content| pages[content['index']-1] = content['file'] end @file_info = {} @pages.each do |file| @file_info[file] = configuration_pack[file] end end |
Instance Attribute Details
#pages ⇒ Object (readonly)
Returns the value of attribute pages.
6 7 8 |
# File 'lib/comic_walker/item_decoder.rb', line 6 def pages @pages end |
Instance Method Details
#decode(file, dat_path, img_path, blob) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/comic_walker/item_decoder.rb', line 45 def decode(file, dat_path, img_path, blob) src = Magick::Image.from_blob(blob).first width = src.columns height = src.rows page_info = @file_info[file]['FileLinkInfo']['PageLinkInfoList'].first['Page'] dummy_height = page_info['DummyHeight'] dummy_width = page_info['DummyWidth'] t = dat_path.sub_ext('').to_s.chars.inject(0) { |acc, c| acc + c.ord } pat = t%4 + 1 moves = Unknown.calculate_moves(width, height, 64, 64, pat) dst = Magick::Image.new(width - dummy_width, height - dummy_height) dst.format = 'jpeg' moves.each do |move| crop = src.excerpt(move[:destX], move[:destY], move[:width], move[:height]) dst.composite!(crop, move[:srcX], move[:srcY], Magick::SrcOverCompositeOp) end dst.write(img_path.to_s) end |
#decode_b64(file, dat_path, img_path, b64data) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/comic_walker/item_decoder.rb', line 32 def decode_b64(file, dat_path, img_path, b64data) bs = 128 hs = 1024 blob = Unknown.finish( @key1, hs, Unknown.decrypt( @key2, bs, Unknown.prepare(@key3, Base64.decode64(b64data).unpack('C*')) ) ).pack('C*') decode(file, dat_path, img_path, blob) end |
#has_keys? ⇒ Boolean
28 29 30 |
# File 'lib/comic_walker/item_decoder.rb', line 28 def has_keys? !!@key1 end |