1 class ResourcePicture < ActiveRecord::Base
4 has_many :panel_pictures
5 belongs_to :original_picture
7 before_destroy :destroy_with_file
10 PictureIO.resource_picture_io.delete self.filename
11 PictureIO.resource_picture_io.class.subdirs.each do |d|
13 PictureIO.resource_picture_io.delete(self.filename, d) if PictureIO.resource_picture_io.exist?(self.filename, d)
17 def self.resize(data, dw, dh)
18 Magick::Image.from_blob(data).shift.resize(dw, dh)
21 #サイズの調整(limw,limhに必ず収まるように合わせる)
22 def self.fix_size_both(limw, limh, w, h)
48 "#{self.id}.#{self.dext}"
64 rimg.flip.flop.to_blob
68 '/resource_pictures/' + (subdir.to_s.empty? ? '' : subdir.to_s + '/' ) + filename
72 tw, th = ResourcePicture.fix_size_both(64, 64, rimg.columns, rimg.rows)
73 ResourcePicture.resize(rimg.to_blob, tw, th).to_blob
76 def self.update_picture(op)
77 res = op.resource_picture || ResourcePicture.new
78 res.attributes = {:width => op.width, :height => op.height, :ext => op.ext, :filesize => op.filesize,
79 :original_picture_id => op.id, :artist_id => op.artist_id, :license_id => op.license_id
85 self.dext == 'png' and self.license.no_convert == 0
88 def self.png_to_gif(data)
90 mgk = Magick::Image.from_blob(data).shift
103 if res = self.store_picture(mgk)
105 if gifmgk = ResourcePicture.png_to_gif(mgk.to_blob)
106 res = self.store_picture(gifmgk)
116 def store_picture(mgk)
118 PictureIO.resource_picture_io.class.subdirs.each do |d|
119 picdata = d.empty? ? mgk.to_blob : self.__send__(d, mgk)
120 res = PictureIO.resource_picture_io.put(picdata, self.filename, d)
126 def restore(subdir = nil)
127 PictureIO.resource_picture_io.get self.filename, subdir