OSDN Git Service

import all source code
[pettanr/pettanr.git] / lib / s3_picture.rb
diff --git a/lib/s3_picture.rb b/lib/s3_picture.rb
new file mode 100644 (file)
index 0000000..f6d7bf8
--- /dev/null
@@ -0,0 +1,68 @@
+require 'picture_io'
+require 'aws/s3'
+class PictureIO
+  class S3Picture
+    def initialize base_dir = 'pettanr'
+      @base = base_dir
+    end
+    
+    def base
+      @base
+    end
+    
+    def base=(b)
+      @base = b
+    end
+    
+    def self.subdirs
+      ['', 'v', 'h', 'vh', 'thumbnail']
+    end
+    
+    def dir(subdir = nil)
+      sd = if subdir.to_s.empty?
+        ''
+      else
+        subdir.to_s + '/'
+      end
+      sd
+    end
+    
+    def put(bindata, filename, subdir = nil)
+      AWS::S3::S3Object.store(dir(subdir) + filename, bindata, base)
+    end
+    
+    def get(filename, subdir = nil)
+      bindata = ''
+  #      if AWS::S3::S3Object.exists?(fn, 'pettanr')
+      AWS::S3::S3Object.stream(dir(subdir) + filename, base) do |st|
+        bindata += st if st
+      end
+      bindata
+    end
+    
+    def store(dt)
+      iw, ih = Image.fix_size_both(80, 80, dt.columns, dt.rows)
+      n = dt.to_blob
+      v = dt.flip.to_blob
+      h = dt.flop.to_blob
+      vh = dt.flip.flop.to_blob
+      AWS::S3::S3Object.store(filename, n, 'pettanr')
+      AWS::S3::S3Object.store('v/' + filename, v, 'pettanr') if v
+      AWS::S3::S3Object.store('h/' + filename, h, 'pettanr') if h
+      AWS::S3::S3Object.store('vh/' + filename, vh, 'pettanr') if vh
+      
+      t = Image.resize(dt.to_blob, iw, ih).to_blob
+      AWS::S3::S3Object.store('thumbnail/' + filename, t, 'pettanr')
+    end
+    
+    def restore(turn)
+      dt = ''
+  #      if AWS::S3::S3Object.exists?(fn, 'pettanr')
+      d = turn ? "#{turn}/" : ''
+      AWS::S3::S3Object.stream(d + filename, 'pettanr') do |st|
+        dt += st if st
+      end
+      dt
+    end
+  end
+end