/lib/tasks/bili_ranking_image.rb
Ruby | 207 lines | 193 code | 4 blank | 10 comment | 7 complexity | 84f034e4a982ef397791e5ae9eea6dba MD5 | raw file
- class BiliRankingImage
- require 'RMagick'
- include Magick
- require 'jcode'
- attr_accessor :path
- alias :pa :path
- alias :pa= :path=
- FONT_EXE = "#{RAILS_ROOT}/public/acfun_list_font_pic.exe"
- TMP_FILE = 'tmp.png'
- @@iconv ||= Iconv.new 'GB18030', 'UTF-8//IGNORE'
- FONT_FZZHY_GBK = @@iconv.iconv "????_GBK"
- FONT_FZKTJ = @@iconv.iconv "??????"
- FONT_HYZHJ = @@iconv.iconv "?????"
- FONT_HYZJTJ = @@iconv.iconv "??????"
- FONT_KT = @@iconv.iconv "??"
- FONT_FZZYJ = @@iconv.iconv "??????"
- CHENG = @@iconv.iconv "×"
- def self.new pa
- brl = super()
- brl.path = pa
- brl
- end
- def make_ranking_img1 weekly_result
- d = weekly_result
- last_rank = d.last_score_rank
- work = Work.find_by_wid d.wid
- @draw = Draw.new
- img = d.is_changqi? ? ImageList.new(public_pa + 'model_c.png') : ImageList.new(public_pa + 'model.png')
- d_name = @@iconv.iconv(d.name)
- case d_name.size
- when 0..44 then j_title_size = 18
- when 45..50 then j_title_size = 17
- when 51..55 then j_title_size = 16
- when 56..60 then j_title_size = 15
- when 61..65 then j_title_size = 14
- else
- j_title_size = 13
- end
- #??
- draw_font d_name, FONT_FZZHY_GBK, j_title_size, "FF111111", 18, 306
- #ID,PAD,DATE
- draw_font "av#{d.wid}", FONT_FZZYJ, 25, "FF333333", 25, 344
- if d.is_space_fix
- draw_font @@iconv.iconv("#{d.wtype}/#{Work.find_by_wid(d.wid).show_space_info(true)}"), FONT_FZZHY_GBK, 17, "FF444444", 138, 346
- elsif d.wtype.jlength > 6 && d.wtype.size > 10
- draw_font @@iconv.iconv(d.wtype), FONT_FZZHY_GBK, 17, "FF222222", 138, 346
- else
- draw_font @@iconv.iconv(d.wtype), FONT_FZZHY_GBK, 20, "FF222222", 148, 346
- end
- @draw.gravity NorthGravity
- draw_font work.cdate.strftime("%Y-%m-%d %H:%M"), FONT_FZZHY_GBK, 16, "FF222222", 90, 339
- draw_font @@iconv.iconv(d.author), FONT_FZZHY_GBK, 16, "FFCC0000", 90, 356 unless d.author.blank?
- #??
- @draw.gravity NorthEastGravity
- score_color = d.is_space_fix ? "FF333300" : "FFCC0000"
- draw_font Result.point_str(d.score), FONT_HYZHJ, 22, score_color, 30, 267
- #???
- revised_clicks = Result.get_click_revised(d.part)
- fixed_clicks = d.clicks * revised_clicks
- if revised_clicks.to_s.length > 3
- draw_font Result.point_str(d.clicks), FONT_FZZHY_GBK, 20, "FF3636CD", 44, 123
- else
- draw_font Result.point_str(d.clicks), FONT_FZZHY_GBK, 20, "FF3636CD", 35, 123
- end
- #???
- revised_comments = Result.get_comment_revised(fixed_clicks, d.comments)
- if revised_comments.to_s.length > 2
- draw_font Result.point_str(d.comments), FONT_FZZHY_GBK, 20, "FF3636CD", 58, 168
- else
- draw_font Result.point_str(d.comments), FONT_FZZHY_GBK, 20, "FF3636CD", 38, 168
- end
- #???
- draw_font Result.point_str(d.stows), FONT_FZZHY_GBK, 20, "FF3636CD", 44, 213
- #??
- draw_font "#{CHENG}#{revised_clicks}", FONT_FZZHY_GBK, 15, "FF472347", 2, 127
- draw_font "#{CHENG}#{revised_comments}", FONT_FZZHY_GBK, 15, "FF472347", 2, 172
- if d.stows.to_i > 500
- @draw.composite 18, 208, 28, 27, ImageList.new('stow_star.png')
- else
- draw_font "#{CHENG}#{Result::E_S}", FONT_FZZHY_GBK, 15, "FF472347", 2, 217
- end
- #??
- @draw.gravity NorthGravity
- draw_font d.score_rank, FONT_HYZJTJ, 60, "FFCC0000", 195, 12
- #???
- draw_font d.clicks_rank, FONT_HYZJTJ, 20, "FFCC0000", 202, 105
- draw_font d.comments_rank, FONT_HYZJTJ, 20, "FFCC0000", 202, 150
- draw_font d.stows_rank, FONT_HYZJTJ, 20, "FFCC0000", 202, 195
- draw_font d.part, FONT_HYZJTJ, 22, "FFCC0000", 212, 238
- #????
- if last_rank.nil?
- rank_str = @@iconv.iconv "?????"
- draw_font rank_str, FONT_FZZHY_GBK, 18, "FF0B4B77", 200, 78
- elsif last_rank.zero?
- draw_font "NEW", FONT_HYZJTJ, 20, "FFFF6600", 196, 78
- elsif last_rank == -1
- rank_str = @@iconv.iconv "???(??)"
- draw_font rank_str, FONT_FZZHY_GBK, 18, "FF0B4B77", 200, 78
- elsif last_rank > d.score_rank
- @draw.composite 235, 76, 16, 22, ImageList.new(public_pa+"model_up.png")
- rank_str = @@iconv.iconv "??#{last_rank > 999 ? ':' : '?'}#{last_rank}"
- draw_font rank_str, FONT_FZZHY_GBK, 18, "FF0B4B77", 188, 78
- elsif last_rank < d.score_rank
- @draw.composite 235, 76, 16, 22, ImageList.new(public_pa+"model_down.png")
- rank_str = @@iconv.iconv "??#{last_rank > 999 ? ':' : '?'}#{last_rank}"
- draw_font rank_str, FONT_FZZHY_GBK, 18, "FF0B4B77", 188, 78
- else
- @draw.composite 235, 80, 25, 14, ImageList.new(public_pa+"model_equal.png")
- rank_str = @@iconv.iconv "???#{last_rank}"
- draw_font rank_str, FONT_FZZHY_GBK, 18, "FF0B4B77", 188, 78
- end
- @draw.draw img
- img_path = pa + "2_list1\\top#{d.score_rank}.png"
- img.write img_path
- end
- def make_ranking_img2 weekly_results
- img = nil
- img_index = 0
- weekly_results.each_with_index do |d, i|
- last_rank = d.last_score_rank
- e_i = i % 3
- work = Work.find_by_wid d.wid
- d_name = @@iconv.iconv(d.name).gsub(/\"/,'\\"')
- img = ImageList.new(pa + '3_list2\\_model.png') if e_i.zero?
- @draw = Draw.new
- case d_name.size
- when 0..38 then j_title_size = 22
- when 39..41 then j_title_size = 21
- when 42..44 then j_title_size = 20
- when 45..47 then j_title_size = 19
- when 48..50 then j_title_size = 18
- when 51..53 then j_title_size = 17
- when 54..56 then j_title_size = 16
- when 57..59 then j_title_size = 15
- when 60..62 then j_title_size = 14
- else j_title_size = 13
- end
- #??
- pic_path = work.pic_path
- pic_data = open(pic_path){|f| f.read} rescue nil
- if pic_data
- File.open('fengmian', 'wb'){|f| f.write(pic_data)}
- @draw.composite 7, 34+120*e_i, 120, 90, ImageList.new('fengmian')
- else
- @draw.composite 7, 34+120*e_i, 120, 90, ImageList.new('nofengmian.png')
- end
- #??
- draw_font d_name, FONT_FZZHY_GBK, j_title_size, "FF222222", 18, 8+120*e_i
- #??
- @draw.gravity NorthGravity
- draw_font d.score_rank, FONT_FZKTJ, 70, "FFFF3300", -81, 22+120*e_i
- #ID,PAD,DATE
- draw_font "av#{d.wid}", FONT_HYZHJ, 18, "FFFFFFFF", -82, 107+120*e_i
- draw_font d.part, FONT_HYZHJ, 22, "FFCC0000", 235, 46+120*e_i
- draw_font work.cdate.strftime("%Y-%m-%d %H:%M"), FONT_FZZHY_GBK, 17, "FFFFFFFF", 135, 107+120*e_i
- #??
- @draw.gravity NorthEastGravity
- score_color = d.is_space_fix ? "FF333300" : "FFFF3300"
- draw_font Result.point_str(d.score), FONT_HYZHJ, 25, score_color, 48, 77+120*e_i
- #??
- draw_font Result.point_str(d.clicks), FONT_HYZHJ, 18, "FFCC0000", 175, 38+120*e_i
- draw_font Result.point_str(d.comments), FONT_HYZHJ, 18, "FFCC0000", 193, 60+120*e_i
- draw_font Result.point_str(d.stows), FONT_HYZHJ, 18, "FFCC0000", 202, 83+120*e_i
- #???
- @draw.gravity NorthGravity
- draw_font d.clicks_rank, FONT_HYZHJ, 18, "FF663366", 130, 38+120*e_i
- draw_font d.comments_rank, FONT_HYZHJ, 18, "FF663366", 130, 60+120*e_i
- draw_font d.stows_rank, FONT_HYZHJ, 18, "FF663366", 74, 83+120*e_i
- #??
- @draw.gravity NorthWestGravity
- draw_font "#{CHENG}#{Result.get_click_revised d.part}", FONT_FZZHY_GBK, 15, "FF0033FF", 327, 38+120*e_i
- draw_font "#{CHENG}#{Result.get_comment_revised(d.clicks*Result.get_click_revised(d.part), d.comments)}", FONT_FZZHY_GBK, 15, "FF0033FF", 310, 60+120*e_i
- #????
- @draw.gravity NorthGravity
- if last_rank.nil?
- rank_str = "LAST:??"
- elsif last_rank.zero?
- rank_str = "NEW"
- elsif last_rank == -1
- rank_str = @@iconv.iconv "LAST:??"
- elsif last_rank > d.score_rank
- rank_str = @@iconv.iconv "LAST:#{last_rank}?"
- elsif last_rank < d.score_rank
- rank_str = @@iconv.iconv "LAST:#{last_rank}?"
- else
- rank_str = @@iconv.iconv "LAST: #{last_rank}?"
- end
- draw_font rank_str, FONT_KT, 17, "FFFFFFFF", 19, 107+120*e_i
- @draw.draw img
- img.write %[#{pa}3_list2\\#{'0' * (3-(img_index += 1).to_s.size)}#{img_index}.png] if e_i == 2
- end
- end
- private
- def draw_font str, font, font_size, color, x, y
- system %[#{FONT_EXE} "#{str}" #{color} #{font_size} #{font}"]
- @draw.composite x, y, 0, 0, ImageList.new(TMP_FILE)
- end
-
- def public_pa; %[#{pa}..\\public\\]; end
- def list1_pa; %[#{pa}2_list1\\]; end
- def list2_pa; %[#{pa}3_list2\\]; end
- end