Class: ImageSize
- Inherits:
-
Object
- Object
- ImageSize
- Defined in:
- lib/image_size.rb
Defined Under Namespace
Modules: Type
Constant Summary collapse
- JpegCodeCheck =
[ "\xc0", "\xc1", "\xc2", "\xc3", "\xc5", "\xc6", "\xc7", "\xc9", "\xca", "\xcb", "\xcd", "\xce", "\xcf", ]
Class Method Summary collapse
-
.type_list ⇒ Object
image type list.
Instance Method Summary collapse
- #get_height ⇒ Object
-
#get_type ⇒ Object
get parameter.
- #get_width ⇒ Object
-
#initialize(img_data, img_type = nil) ⇒ ImageSize
constructor
receive image & make size argument is image String or IO.
- #measure_SWF ⇒ Object
Constructor Details
#initialize(img_data, img_type = nil) ⇒ ImageSize
receive image & make size argument is image String or IO
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/image_size.rb', line 37 def initialize(img_data, img_type = nil) @img_data = img_data.dup @img_width = nil @img_height = nil if @img_data.is_a?(IO) @img_top = @img_data.read(128) @img_data.seek(0, 0) # define Singleton-method definition to IO (byte, offset) def @img_data.read_o(length = 1, offset = nil) self.seek(offset, 0) if offset ret = self.read(length) raise "cannot read!!" unless ret ret end elsif @img_data.is_a?(String) @img_top = @img_data[0, 128] # define Singleton-method definition to String (byte, offset) def @img_data.read_o(length = 1, offset = nil) @img_offset = 0 if !(defined?(@img_offset)) @img_offset = offset if offset ret = self[@img_offset, length] @img_offset += length ret end else raise "argument class error!! #{img_data.type}" end if img_type.nil? @img_type = check_type() else match = false Type.constants.each do |t| match = true if img_type == t end raise("img_type is failed. #{img_type}\n") if match == false @img_type = img_type end eval("@img_width, @img_height = measure_" + @img_type + "()") if @img_type != Type::OTHER end |
Class Method Details
Instance Method Details
#get_height ⇒ Object
82 83 84 |
# File 'lib/image_size.rb', line 82 def get_height if @img_type == Type::OTHER then nil else @img_height end end |
#get_type ⇒ Object
get parameter
81 |
# File 'lib/image_size.rb', line 81 def get_type; @img_type; end |
#get_width ⇒ Object
85 86 87 |
# File 'lib/image_size.rb', line 85 def get_width if @img_type == Type::OTHER then nil else @img_width end end |
#measure_SWF ⇒ Object
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/image_size.rb', line 242 def measure_SWF() header = @img_data.read_o(9) raise("This file is not SWF.") unless header.unpack('a3')[0] == 'FWS' bit_length = Integer("0b#{header.unpack('@8B5')}") header << @img_data.read_o(bit_length*4/8+1) str = header.unpack("@8B#{5+bit_length*4}")[0] last = 5 x_min = Integer("0b#{str[last,bit_length]}") x_max = Integer("0b#{str[(last += bit_length),bit_length]}") y_min = Integer("0b#{str[(last += bit_length),bit_length]}") y_max = Integer("0b#{str[(last += bit_length),bit_length]}") width = (x_max - x_min)/20 height = (y_max - y_min)/20 [width, height] end |