OSDN Git Service

t#29400:itr3?
[pettanr/pettanr.git] / lib / pettan_imager.rb
diff --git a/lib/pettan_imager.rb b/lib/pettan_imager.rb
new file mode 100644 (file)
index 0000000..26cbfd4
--- /dev/null
@@ -0,0 +1,119 @@
+#画像処理
+require 'digest/md5'
+require 'RMagick'
+class PettanImager
+  @@tmb_w = 50
+  @@tmb_h = 50
+  
+  def self.tmb_w
+    @@tmb_w
+  end
+  
+  def self.tmb_w=(v)
+    @@tmb_w = v
+  end
+  
+  def self.tmb_h
+    @@tmb_h
+  end
+  
+  def self.tmb_h=(v)
+    @@tmb_h = v
+  end
+  
+  def initialize bindata
+    @binary = bindata
+    @lib =Magick::Image.from_blob(@binary).shift
+  end
+  
+  def self.load bindata
+    r = nil
+    begin
+      r = PettanImager.new bindata
+    rescue 
+      r = false
+    end
+    r
+  end
+  
+  def binary
+    @binary
+  end
+  
+  def lib
+    @lib
+  end
+  
+  def width
+    @lib.columns
+  end
+  
+  def height
+    @lib.rows
+  end
+  
+  def filesize
+    @lib.filesize
+  end
+  
+  def ext
+    @lib.format.downcase
+  end
+  
+  def md5
+    Digest::MD5.hexdigest(@lib.to_blob)
+  end
+  
+  def v
+    @lib.flip.to_blob
+  end
+  
+  def h
+    @lib.flop.to_blob
+  end
+  
+  def vh
+    @lib.flip.flop.to_blob
+  end
+  
+  def to_gif
+    @lib.format = 'gif'
+    PettanImager.load @lib.to_blob
+  end
+  
+  def to_thumbnail
+    PettanImager.load(@lib.resize(*thumbnail_size).to_blob)
+  end
+  
+  def thumbnail_size
+    PettanImager.fix_size_both PettanImager.tmb_w, PettanImager.tmb_h, self.width, self.height
+  end
+  
+  #ただサイズ計算したいとき
+  def self.thumbnail_size w, h
+    PettanImager.fix_size_both PettanImager.tmb_w, PettanImager.tmb_h, w, h
+  end
+  
+  #サイズの調整(limw,limhに必ず収まるように合わせる)
+  def self.fix_size_both(limw, limh, w, h)
+    wr = if w > limw
+      limw*100/w
+    else
+      100
+    end
+    hr = if h > limh
+      limh*100/h
+    else
+      100
+    end
+    res = if wr < hr
+      #幅の方が圧縮率が高い
+      [w*wr/100, h*wr/100]
+    else
+      #高さの方が圧縮率が高い
+      [w*hr/100, h*hr/100]
+    end
+    res
+  end
+  
+end