Module: ICO::Utils
Constant Summary collapse
- APPEND_FILE_FORMAT =
'-%<x>dx%<y>d'
Instance Method Summary collapse
- #contains_dir?(filename_array) ⇒ Boolean
- #contains_other_than_ext?(filename_array, extname) ⇒ Boolean
- #filter_dir(filename_array, enum) ⇒ Array
- #filter_ext(filename_array, enum, extname, include_dirs = false) ⇒ Object
- #format_ext(extname, overwrite = false) ⇒ Object
- #format_ext!(extname) ⇒ Object
- #get_size(image_filename) ⇒ Object
-
#png_to_sizes(input_filename, sizes_array, output_dirname = nil, append_filenames = APPEND_FILE_FORMAT, force_overwrite = false, clear = true, force_clear = false) ⇒ String
resize PNG file and write new sizes to directory.
- #sizes_hash(filename_array, sort = false, reverse = false) ⇒ Object
Instance Method Details
#contains_dir?(filename_array) ⇒ Boolean
50 51 52 |
# File 'lib/ico/utils.rb', line 50 def contains_dir?(filename_array) filename_dir(filename_array, :select).any? end |
#contains_other_than_ext?(filename_array, extname) ⇒ Boolean
54 55 56 |
# File 'lib/ico/utils.rb', line 54 def contains_other_than_ext?(filename_array, extname) filter_ext(filename_array, :reject, extname, true).any? end |
#filter_dir(filename_array, enum) ⇒ Array
13 14 15 16 17 18 19 |
# File 'lib/ico/utils.rb', line 13 def filter_dir(filename_array, enum) raise ArgumentError unless filename_array.is_a? Array raise ArgumentError unless enum.is_a?(String) || enum.is_a?(Symbol) raise ArgumentError unless enum.to_s =~ /reject|select/ filename_array.send(enum).each {|fn| Dir.exist?(fn)} end |
#filter_ext(filename_array, enum, extname, include_dirs = false) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/ico/utils.rb', line 21 def filter_ext(filename_array, enum, extname, include_dirs=false) raise ArgumentError unless filename_array.is_a? Array raise ArgumentError unless enum.is_a?(String) || enum.is_a?(Symbol) raise ArgumentError unless enum.to_s =~ /reject|select/ raise ArgumentError unless extname.is_a?(String) || extname.is_a?(Symbol) # reject dirs for accuracy tmp_array = filter_dir(filename_array, :reject) # operation on array tmp_array = tmp_array.send(enum).each {|fn| format_ext(File.extname(fn)) == format_ext(extname)} include_dirs ? tmp_array + filter_dir(filename_array, :select) : tmp_array end |
#format_ext(extname, overwrite = false) ⇒ Object
36 37 38 39 40 41 42 43 44 |
# File 'lib/ico/utils.rb', line 36 def format_ext(extname, overwrite=false) raise ArgumentError unless extname.is_a?(String) || extname.is_a?(Symbol) temp_str = extname.to_s.sub(/\A\.?/, '.').downcase extname = tmp_str if overwrite temp_str end |
#format_ext!(extname) ⇒ Object
46 47 48 |
# File 'lib/ico/utils.rb', line 46 def format_ext!(extname) format_ext(extname, true) end |
#get_size(image_filename) ⇒ Object
59 60 61 |
# File 'lib/ico/utils.rb', line 59 def get_size(image_filename) IO.read(image_filename)[0x10..0x18].unpack('NN') end |
#png_to_sizes(input_filename, sizes_array, output_dirname = nil, append_filenames = APPEND_FILE_FORMAT, force_overwrite = false, clear = true, force_clear = false) ⇒ String
resize PNG file and write new sizes to directory
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/ico/utils.rb', line 104 def png_to_sizes(input_filename, sizes_array, output_dirname=nil, append_filenames=APPEND_FILE_FORMAT, force_overwrite=false, clear=true, force_clear=false) basename = File.basename(input_filename, '.*') output_dirname ||= File.join(File.(File.dirname(input_filename)), "#{basename}_sizes") # ensure dir exists FileUtils.mkdir_p(output_dirname) # ensure dir empty if clear filename_array = Dir.glob(File.join(output_dirname, '**/*')) unless force_clear # protect from destructive action raise "more than ICO format files in #{output_dirname}" if contains_other_than_ext?(filename_array, :ico) end FileUtils.rm_rf(filename_array) end # import base image img = ChunkyPNG::Image.from_file(input_filename) # resize sizes_array.each do |x,y| y ||= x img_attrs = {:x => x, :y => y} bn = basename + Kernel.sprintf(append_filenames, img_attrs) fn = File.join(output_dirname, "#{bn}.png") img_out = img.resample_nearest_neighbor(x, y) unless force_overwrite raise "File exists: #{fn}" if File.exist?(fn) end IO.write(fn, img_out) end return output_dirname end |
#sizes_hash(filename_array, sort = false, reverse = false) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/ico/utils.rb', line 63 def sizes_hash(filename_array, sort=false, reverse=false) raise ArgumentError unless filename_array.is_a? Array tmp_hash = filename_array.inject({}) {|h,fn| h[get_size(fn)] = fn; h} case when sort && !reverse return tmp_hash.sort.to_h when reverse && !sort return tmp_hash.to_a.reverse.to_h when sort && reverse return tmp_hash.sort.reverse.to_h else return tmp_hash end end |