我已经搜索了高低,以获得更多有关能够使用Carrierwave处理上传文件的信息,将其分成16个图块。我知道我可以从命令行使用ImageMagick并使用以下内容拆分文件:
convert imagename: -crop 4x4@ +repage +adjoin imagename_%d.gif
例如。这非常适合平铺并将文件从rose_0.gif保存到rose_15.gif。
我找不到任何使用RMagick执行相同功能的东西,但偶然发现以下代码使用Ruby on Rails等执行相同的功能:
def split_images
#'image' is a ImageMagick Object
width = image.cols/number_cols
height = image.rows/nubmer_rows
images = []
0.upto(number_rows-1) do |x|
0.upto(number_cols-1) do |y|
images << image.crop( Magick::NorthWestGravity, x*width, y*height, width, height, true)
end
end
end
我正在尝试从iOS应用程序上传图像,并让Carrierwave通过在Carrierwave中编写一个版本:例程来处理图像处理。
是否可以这样做?如果是这样,文件将如何保存?而且,更重要的是,我如何在视图中“调用”或引用文件?有人可以指点我正确的方向吗?或者建议另一种方法?
我知道我可能会编写16个不同的版本:命令,但这看起来有点傻。
我真的觉得我已经阅读了CarrierWave和ImageMagick等所有内容,但是很难过。
感谢任何帮助。
提前致谢
答案 0 :(得分:0)
我相信我已经使用以下方法解决了这个问题并提供了答案,以防万一其他人想要做同样的事情:
# encoding: utf-8
class PhotoUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
include CarrierWave::RMagick
# include CarrierWave::MiniMagick
process :resize_to_limit => [640, 1136]
process :convert => 'png'
NUMBER_OF_COLS = 4
NUMBER_OF_ROWS = 4
# Choose what kind of storage to use for this uploader:
storage :file
# storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :small do
process :resize_to_limit => [100, 100]
end
0.upto(NUMBER_OF_ROWS-1) do |x|
0.upto(NUMBER_OF_COLS-1) do |y|
name = "image#{x}#{y}"
version(name) {
process :name => [x,y,160,284]
}
end
end
def name(x,y,width,height)
manipulate!(:format => 'png') do |img|
img.crop(Magick::NorthWestGravity, x*width, y*height, width, height, true)
end
end
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
def extension_white_list
%w(jpg jpeg gif png)
end
end
我仍然不满意必须在代码中硬编码宽度和高度的尺寸,但无法让@geometry的东西工作以传递给我实际的图像宽度和高度,但它确实此刻的工作。如果有人有任何改进,我将不胜感激。
感谢Ryan Bates在ImageMagick上的Railscast,它指出了我正确的方向。