Advertisement
Sepheus

YANUDecoder

Nov 24th, 2012
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.00 KB | None | 0 0
  1. require 'chunky_png'
  2.  
  3. image = ChunkyPNG::Image.from_file('YANU.png')
  4.  
  5. red = image.to_rgb_stream.unpack('axx'*(image.to_rgb_stream.length/3)).join
  6. green = image.to_rgb_stream.unpack('xax'*(image.to_rgb_stream.length/3)).join
  7. blue = image.to_rgb_stream.unpack('xxa'*(image.to_rgb_stream.length/3)).join
  8.  
  9.  
  10. alphaBits = []
  11. redBits = []
  12. blueBits = []
  13. greenBits = []
  14.  
  15. #Extracting the LSB from each byte in each channel.
  16. image.to_alpha_channel_stream.split("").each { |byte| alphaBits << byte.to_s.unpack('b*')[0][0] }
  17. red.split("").each { |byte| redBits << byte.to_s.unpack('b*')[0][0] }
  18. green.split("").each { |byte| greenBits << byte.to_s.unpack('b*')[0][0]}
  19. blue.split("").each { |byte| blueBits << byte.to_s.unpack('b*')[0][0] }
  20.  
  21. #Zip the bits together to produce an interleaved bit pattern.
  22. done = ""
  23. interleaved = alphaBits.zip(redBits).zip(greenBits).zip(blueBits).flatten
  24. #Reassemble into bytes.
  25. (0..13).each {|n| bits = interleaved.shift(8); done << bits.join.to_i(2).chr;  }
  26. puts "Decoded: #{done}"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement