--- /dev/null
+#画像処理
+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