--- /dev/null
+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