Tag: carrierwave

Carrierwave裁剪

我有一个CarrierWave ImageUploader,可以根据模型中的值(crop_x,crop_y,crop_w和crop_h)创建需要裁剪的原始图像的几个版本。 class ImageUploader [75, 75] end … def cropper manipulate! do |img| img = img.crop “#{model.crop_x}x#{model.crop_y}+#{model.crop_w}+#{model.crop_h}” img end end end 我遇到的问题是,如果我们没有任何设置,我需要计算一些默认的裁剪值,但我不知道在哪里放这个逻辑。 我尝试将它放在我的Photo模型(上载器安装到)中的before_validation中,但这似乎是在执行了cropper函数之后调用的。 我想它要么是在ImageUploader文件中,要么是在创建拇指之前发生的一些回调中。

使用不同文件类型上载Carrierwave文件

我有以下作为我的FileUploader: class FileUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick version :thumb, if: :image? do # For images, do stuff here end version :preview, if: :pdf? do # For pdf, do stuff here end protected def image?(new_file) new_file.content_type.start_with? 'image' end def pdf?(new_file) new_file.content_type.start_with? 'application' end end 我从carrierwave github页面得到了这个。 它主要起作用,但如果我不想要不同的版本呢? 我基本上只是想做某些过程,如果它是pdf,或某些过程,如果它是一个图像。 我可能会在将来允许其他类型的文件,所以如果我有一个简单的方法也可以这样做很酷。 举个例子,我可能想要使用imgoptim(如果它是图像),然后使用pdf优化库(如果它是pdf等)。 我试过了: if file.content_type = “application/pdf” # […]

Carrierwave无法删除图像

我现在正在使用Carrierwave上传图片。 一切都很好,除了一个, – 当我添加复选框以删除上传的图像时,我收到错误:“无法批量分配受保护的属性:remove_image”。 形成: … … 模型: class Manufacturer /^[az\d\-]*$/, :message => “az, 0-9 \’ – \’ ONLY” default_scope order(‘position ASC’) before_destroy :remember_image after_destroy :remove_img protected def remember_image @image_name = self[:image] end def remove_img File.delete(“#{Rails.root}/public/images/manufacturer/#{@image_name}”) File.delete(“#{Rails.root}/public/images/manufacturer/thumb_#{@image_name}”) end end 提供者: class ManufacturerUploader [300, 300] version :thumb do process :resize_to_fit => [150, 150] end def extension_white_list […]

Carrierwave如何获取文件扩展名

我正在开发一个需要文件上传/下载的Ruby on Rails应用程序。 对于上传部分,我使用了gem carrierwave,因为它非常易于使用且灵活。 问题是:一旦我上传了文件,我需要知道一些事情:即如果它是pdf而不是下载文件我将其显示为内联,并且图像也是如此。 我如何获得文件扩展名 ,我该怎么做才能将文件 发送给用户? 任何反馈表示赞赏谢谢!!

CarrierWave:为所有版本化文件创建相同的唯一文件名

在我详细介绍之前,我会明确指出:有没有人想出办法让Carrierwave保存文件,其名称为时间戳或每个文件唯一的任意字符串? 默认情况下,Carrierwave将每个文件及其备用版本保存在自己的目录中(以型号ID号命名)。 我不喜欢这个,因为为了使用一个大的圆形数字而不是一个1000的目录,文件(在我的情况下是图片)中我们得到一个目录,其中有1,000个子目录,每个子目录有一个或两个文件。 呸。 现在,当您覆盖Uploader的store_dir方法时,如下所示: def store_dir “uploads/#{model.class.to_s.underscore}/#{mounted_as}” end 你最终得到了我想要的确切行为。 所有文件(图片)都进入一个大的快乐文件夹。 删除对象时不再有子文件夹。 只有一个问题。 文件冲突。 如果你上传了delicious_cake.jpg两次,那么即使它们是美味蛋糕的两张不同的照片,它也会覆盖第一个! 这显然是为什么store_dir方法在它返回的值的末尾增加了额外的/#{model.id} 。 那么该怎么办? 在阅读了一下后,我发现在生成的上传器文件中有一个明显的解决方案被注释掉了。 # Override the filename of the uploaded files: # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # “something.jpg” if original_filename # end 经过一番搜索,我找到了一个做过以下事情的人 def filename @name ||= “#{secure_token}.#{file.extension}” if original_filename […]

Carrierwave作物特定版本

我正致力于使用carrierwave和Jcrop裁剪图像。 它是Railscasts第182集和第253集的组合。我有裁剪工作,但它裁剪原始。 无论如何都强迫manupulate! 使用不同的版本? def crop_image(x,y,w,h) manipulate! do |img| img.crop(x.to_i, y.to_i, w.to_i, h.to_i) end end 或者有没有办法从模型调用中设置版本? attr_accessor :crop_x, :crop_y, :crop_w, :crop_h attr_accessible :description, :image, :crop_x, :crop_y, :crop_w, :crop_h after_update :reprocess_image, :if => :cropping? def cropping? !crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank? end def reprocess_image image.crop_image(crop_x, crop_y, crop_w, crop_h) end

CarrierWave和正确的文件扩展名取决于其内容

如何根据其内容使CarrierWave添加正确的文件扩展名? 例如,如果我上传文件“logo”(没有扩展名的PNG文件),CarrierWave应将其保存为“logo.png”。 文件“img.gif”(扩展名不正确的JPG文件)应分别保存为“img.jpg”。

使用carrierwave版本时堆栈级别太深

我正在尝试使用sidekiq worker ,它或多或少地将图像文件保存到数据库(使用carrierwave)。 保存的文件很少,这是从video文件中提取的关键帧。 这就是那个工人的意思。 我的图片上传器定义了几个版本,如下所示: class KeyframeUploader < CarrierWave::Uploader::Base # … # Keyframe thumbnail sizes version :small do process resize_to_fill: [180, 180], if: :square? process resize_to_fill: [320, 180], if: :not_square? end version :medium do process resize_to_fill: [460, 460], if: :square? process resize_to_fill: [640, 460], if: :not_square? end version :large do process resize_to_fill: [720, 720], […]

使用carrierwave在gif中获取第一张图像

我使用载波上传gifs工作得很好,问题出现当我尝试生成拇指版本并将gif转换为jpeg只有gif中的第一个图像作为拇指,我得到一个错误: LocalJumpError in ImagesController#create no block given (yield) app/controllers/images_controller.rb:21:in `new’ app/controllers/images_controller.rb:21:in `create’ 请求 参数: {“utf8″=>”✓”, “authenticity_token”=>”lPEjP1WtPxFdizL2/FAWGHzOZPtecb5nKzKO8dg5ZdE=”, “image”=>{“image”=>#<ActionDispatch::Http::UploadedFile:0x007ff5d4cdc720 @original_filename="some-file-name.gif", @content_type="image/gif", @headers="Content-Disposition: form-data; name=\"image[image]\"; filename=\"some-file-name.gif\"\r\nContent-Type: image/gif\r\n", @tempfile=#>, “remote_image_url”=>””, “title”=>”The red panda”, “nsw”=>”0”}, “commit”=>”Roll GIF”} 这是我用来生成拇指的代码: version :thumb do process :resize_to_limit => [200, 200] process :convert => ‘jpg’ end 希望你们能提前帮助和感谢。

Carrierwave – 将图像调整为固定宽度

我正在使用RMagick并希望将我的图像调整为100px的固定宽度,并按比例缩放高度。 例如,如果用户要上传300x900px,我希望将其缩放到100x300px。