1 class ResourcePicture < ActiveRecord::Base
4 has_many :panel_pictures
5 belongs_to :original_picture
7 validates :ext, :presence => true, :length => {:maximum => 4}, :inclusion => {:in => ['png', 'jpeg', 'gif']}
\r
8 validates :width, :presence => true, :numericality => true, :natural_number => true
9 validates :height, :presence => true, :numericality => true, :natural_number => true
10 validates :filesize, :presence => true, :numericality => {:greater_than => 0, :less_than_or_equal_to => 2000000}, :natural_number => true
11 validates :artist_id, :presence => true, :numericality => true, :existence => true
12 validates :license_id, :presence => true, :numericality => true, :existence => true
13 validates :original_picture_id, :presence => true, :numericality => true, :existence => true
15 before_destroy :destroy_with_file
18 PictureIO.resource_picture_io.delete self.filename
19 PictureIO.resource_picture_io.class.subdirs.each do |d|
21 PictureIO.resource_picture_io.delete(self.filename, d) if PictureIO.resource_picture_io.exist?(self.filename, d)
25 def self.resize(data, dw, dh)
26 Magick::Image.from_blob(data).shift.resize(dw, dh)
29 #サイズの調整(limw,limhに必ず収まるように合わせる)
30 def self.fix_size_both(limw, limh, w, h)
56 "#{self.id}.#{self.dext}"
72 rimg.flip.flop.to_blob
76 '/resource_pictures/' + (subdir.to_s.empty? ? '' : subdir.to_s + '/' ) + filename
80 tw, th = ResourcePicture.fix_size_both(64, 64, rimg.columns, rimg.rows)
81 ResourcePicture.resize(rimg.to_blob, tw, th).to_blob
84 def self.update_picture(op)
85 res = op.resource_picture || ResourcePicture.new
86 res.attributes = {:width => op.width, :height => op.height, :ext => op.ext, :filesize => op.filesize,
87 :original_picture_id => op.id, :artist_id => op.artist_id, :license_id => op.license_id
93 self.dext == 'png' and self.license.no_convert == 0
96 def self.png_to_gif(data)
99 mgk = Magick::Image.from_blob(data).shift
111 if res = self.store_picture(mgk)
113 if gifmgk = ResourcePicture.png_to_gif(mgk.to_blob)
114 res = self.store_picture(gifmgk)
124 def store_picture(mgk)
126 PictureIO.resource_picture_io.class.subdirs.each do |d|
127 picdata = d.empty? ? mgk.to_blob : self.__send__(d, mgk)
128 res = PictureIO.resource_picture_io.put(picdata, "#{self.id}.#{mgk.format}", d)
134 def restore(subdir = nil)
135 PictureIO.resource_picture_io.get self.filename, subdir