OSDN Git Service

fix:error dlg
[pettanr/pettanr.git] / lib / pettan_imager.rb
1 #画像処理
2 require 'digest/md5'
3 require 'RMagick'
4 class PettanImager
5   @@tmb_w = 50
6   @@tmb_h = 50
7   
8   def self.tmb_w
9     @@tmb_w
10   end
11   
12   def self.tmb_w=(v)
13     @@tmb_w = v
14   end
15   
16   def self.tmb_h
17     @@tmb_h
18   end
19   
20   def self.tmb_h=(v)
21     @@tmb_h = v
22   end
23   
24   def initialize bindata
25     @binary = bindata
26     @lib =Magick::Image.from_blob(@binary).shift
27   end
28   
29   def self.load bindata
30     r = nil
31     begin
32       r = PettanImager.new bindata
33     rescue 
34       r = false
35     end
36     r
37   end
38   
39   def binary
40     @binary
41   end
42   
43   def lib
44     @lib
45   end
46   
47   def width
48     @lib.columns
49   end
50   
51   def height
52     @lib.rows
53   end
54   
55   def filesize
56     @lib.filesize
57   end
58   
59   def ext
60     @lib.format.downcase
61   end
62   
63   def md5
64     Digest::MD5.hexdigest(@binary)
65   end
66   
67   def v
68     @lib.flip.to_blob
69   end
70   
71   def h
72     @lib.flop.to_blob
73   end
74   
75   def vh
76     @lib.flip.flop.to_blob
77   end
78   
79   def to_gif
80     @lib.format = 'gif'
81     PettanImager.load @lib.to_blob
82   end
83   
84   def to_thumbnail
85     PettanImager.load(@lib.resize(*thumbnail_size).to_blob)
86   end
87   
88   def thumbnail_size
89     PettanImager.fix_size_both PettanImager.tmb_w, PettanImager.tmb_h, self.width, self.height
90   end
91   
92   #ただサイズ計算したいとき
93   def self.thumbnail_size w, h
94     PettanImager.fix_size_both PettanImager.tmb_w, PettanImager.tmb_h, w, h
95   end
96   
97   #サイズの調整(limw,limhに必ず収まるように合わせる)
98   def self.fix_size_both(limw, limh, w, h)
99     wr = if w > limw
100       limw*100/w
101     else
102       100
103     end
104     hr = if h > limh
105       limh*100/h
106     else
107       100
108     end
109     res = if wr < hr
110       #幅の方が圧縮率が高い
111       [w*wr/100, h*wr/100]
112     else
113       #高さの方が圧縮率が高い
114       [w*hr/100, h*hr/100]
115     end
116     res
117   end
118   
119 end