如何创建自定义回形针处理器以检索图像尺寸 Rails 4
How to create Custom Paperclip Processor to retrieve image dimensions Rails 4
我想在创建附加文件之前检索图像上传尺寸。我通过模型通过 Extracting Image dimensions 得到了这个。但我想通过自定义处理器发送。我试过的是:
Player.rb
class Player < ActiveRecord::Base
has_attached_file :avatar, processors: [:custom], :style => {:original => {}}
....
end
/lib/paperclip_processors/custom.rb
module Paperclip
class Custom < Processor
def initialize file, options = {}, attachment = nil
super
@file = file
@attachment = attachment
@current_format = File.extname(@file.path)
@format = options[:format]
@basename = File.basename(@file.path, @current_format)
end
def make
temp_file = Tempfile.new([@basename, @format])
#geometry = Paperclip::Geometry.from_file(temp_file)
temp_file.binmode
if @is_polarized
run_string = "convert #{fromfile} -thumbnail 300x400 -bordercolor white -background white +polaroid #{tofile(temp_file)}"
Paperclip.run(run_string)
end
temp_file
end
def fromfile
File.expand_path(@file.path)
end
def tofile(destination)
File.expand_path(destination.path)
end
end
end
我从 here 获得了上面的 (custom.rb) 代码。
有可能实现吗?如何?提前致谢:)
我转载了你的案例,我认为原因是这里的错字:
has_attached_file :avatar, processors: [:custom], :style => {:original => {}}
应该是:styles
而不是:style
。如果没有 :styles
选项,回形针不会执行 any post 处理并忽略您的 :processors
.
此外,这里有一个非常简单的 Paperclip::Processor
实现 - 将附件转换为灰度。替换 convert
中的命令以执行您自己的 post-processing:
# lib/paperclip_processors/custom.rb
module Paperclip
class Custom < Processor
def make
basename = File.basename(file.path, File.extname(file.path))
dst_format = options[:format] ? ".\#{options[:format]}" : ''
dst = Tempfile.new([basename, dst_format])
dst.binmode
convert(':src -type Grayscale :dst',
src: File.expand_path(file.path),
dst: File.expand_path(dst.path))
dst
end
end
end
我想在创建附加文件之前检索图像上传尺寸。我通过模型通过 Extracting Image dimensions 得到了这个。但我想通过自定义处理器发送。我试过的是: Player.rb
class Player < ActiveRecord::Base
has_attached_file :avatar, processors: [:custom], :style => {:original => {}}
....
end
/lib/paperclip_processors/custom.rb
module Paperclip
class Custom < Processor
def initialize file, options = {}, attachment = nil
super
@file = file
@attachment = attachment
@current_format = File.extname(@file.path)
@format = options[:format]
@basename = File.basename(@file.path, @current_format)
end
def make
temp_file = Tempfile.new([@basename, @format])
#geometry = Paperclip::Geometry.from_file(temp_file)
temp_file.binmode
if @is_polarized
run_string = "convert #{fromfile} -thumbnail 300x400 -bordercolor white -background white +polaroid #{tofile(temp_file)}"
Paperclip.run(run_string)
end
temp_file
end
def fromfile
File.expand_path(@file.path)
end
def tofile(destination)
File.expand_path(destination.path)
end
end
end
我从 here 获得了上面的 (custom.rb) 代码。 有可能实现吗?如何?提前致谢:)
我转载了你的案例,我认为原因是这里的错字:
has_attached_file :avatar, processors: [:custom], :style => {:original => {}}
应该是:styles
而不是:style
。如果没有 :styles
选项,回形针不会执行 any post 处理并忽略您的 :processors
.
此外,这里有一个非常简单的 Paperclip::Processor
实现 - 将附件转换为灰度。替换 convert
中的命令以执行您自己的 post-processing:
# lib/paperclip_processors/custom.rb
module Paperclip
class Custom < Processor
def make
basename = File.basename(file.path, File.extname(file.path))
dst_format = options[:format] ? ".\#{options[:format]}" : ''
dst = Tempfile.new([basename, dst_format])
dst.binmode
convert(':src -type Grayscale :dst',
src: File.expand_path(file.path),
dst: File.expand_path(dst.path))
dst
end
end
end