OSDN Git Service

import all source code
[pettanr/pettanr.git] / lib / s3_picture.rb
1 require 'picture_io'
2 require 'aws/s3'
3 class PictureIO
4   class S3Picture
5     def initialize base_dir = 'pettanr'
6       @base = base_dir
7     end
8     
9     def base
10       @base
11     end
12     
13     def base=(b)
14       @base = b
15     end
16     
17     def self.subdirs
18       ['', 'v', 'h', 'vh', 'thumbnail']
19     end
20     
21     def dir(subdir = nil)
22       sd = if subdir.to_s.empty?
23         ''
24       else
25         subdir.to_s + '/'
26       end
27       sd
28     end
29     
30     def put(bindata, filename, subdir = nil)
31       AWS::S3::S3Object.store(dir(subdir) + filename, bindata, base)
32     end
33     
34     def get(filename, subdir = nil)
35       bindata = ''
36   #      if AWS::S3::S3Object.exists?(fn, 'pettanr')
37       AWS::S3::S3Object.stream(dir(subdir) + filename, base) do |st|
38         bindata += st if st
39       end
40       bindata
41     end
42     
43     def store(dt)
44       iw, ih = Image.fix_size_both(80, 80, dt.columns, dt.rows)
45       n = dt.to_blob
46       v = dt.flip.to_blob
47       h = dt.flop.to_blob
48       vh = dt.flip.flop.to_blob
49       AWS::S3::S3Object.store(filename, n, 'pettanr')
50       AWS::S3::S3Object.store('v/' + filename, v, 'pettanr') if v
51       AWS::S3::S3Object.store('h/' + filename, h, 'pettanr') if h
52       AWS::S3::S3Object.store('vh/' + filename, vh, 'pettanr') if vh
53       
54       t = Image.resize(dt.to_blob, iw, ih).to_blob
55       AWS::S3::S3Object.store('thumbnail/' + filename, t, 'pettanr')
56     end
57     
58     def restore(turn)
59       dt = ''
60   #      if AWS::S3::S3Object.exists?(fn, 'pettanr')
61       d = turn ? "#{turn}/" : ''
62       AWS::S3::S3Object.stream(d + filename, 'pettanr') do |st|
63         dt += st if st
64       end
65       dt
66     end
67   end
68 end