papercrop won't crop with devise and rails 4

Posted

技术标签:

【中文标题】papercrop won\'t crop with devise and rails 4【英文标题】:papercrop wont crop with devise and rails 4papercrop won't crop with devise and rails 4 【发布时间】:2014-03-03 14:51:32 【问题描述】:

我正在尝试结合设计、剪纸、回形针,以便用户可以裁剪和更新头像。图像向用户完美更新,但不会裁剪。我通过裁剪动作和视图传递它。但它不会裁剪它,也不会显示它。

用户.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_attached_file :avatar, :styles => :thumb => '50x50', :medium => '400x300', 
                                          :default_url => "/images/:style/missing.png"
  validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
  crop_attached_file :avatar, :aspect => "16:9"

end

Registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController

    def new
        super # no customization, simply call the devise implementation
    end

 def update

    if params[resource_name][:avatar].blank?
      super


     elsif params[:user][:email].blank? && params[:user][:password].blank? && params[:user][:password_confirmation].blank? && params[:user][:current_password].blank?
      flash[:notice] = "Successfully updated user."
      redirect_to @user
    else

            @user = User.find(current_user.id)
       respond_to do |format|
         if resource.update_attributes(params[resource_name].permit(:avatar))
            flash[:notice]='Avatar successfully uploaded.'
            format.html 
                    render :action => 'crop'
            
           format.xml   head :ok 
          else
            format.html  render :action => "editpicture" 
            format.xml   render :xml => @demotivator.errors, :status => :unprocessable_entity 
          end
       end
    end
    end
end

GEMFILE

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.1'

# Use sqlite3 as the database for Active Record
# gem 'sqlite3'
gem 'pg'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0'
gem 'bootstrap-sass', '~> 3.1.1'
# Use Uglifier as compressor for javascript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
gem 'simple_form'

gem "font-awesome-rails"

gem 'devise'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
#/usr/local/bin/convert
gem "paperclip", "~> 4.1"


# Use jquery as the JavaScript library
gem 'jquery-rails'

gem 'papercrop'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 1.2'

group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
end

group :production do
  gem 'rails_12factor'
end

# Use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.1.2'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

路线

Sportmatch::Application.routes.draw do

  devise_for :users, :controllers =>  :registrations => 'users/registrations' 
  get 'users/:id' => 'users#show', as: 'user'
  get "pages/home"
  get "pages/main"

  devise_scope :user do
    patch '/users/:id' => 'users/registrations#update'
  end

  # The priority is based upon order of creation: first created -> highest priority.
  # See how all your routes lay out with "rake routes".

  # You can have the root of your site routed with "root"
   root 'pages#home'

显示图像的用户视图

<%= image_tag @user.avatar.url(:medium) %>

追踪

Started PUT "/users" for 127.0.0.1 at 2014-03-03 19:15:39 +0100
Processing by Users::RegistrationsController#update as HTML
  Parameters: "utf8"=>"â", "authenticity_token"=>"IpUoltuKU4yPbcdH1HSikaEyBsYVoJS+d1G94FZWnbc=", "user"=>"email"=>"gjores@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "current_password"=>"[FILTERED]", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x007ffed1e90d68 @tempfile=#<File:/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/RackMultipart20140303-26872-1cc4n5d>, @original_filename="DSC_0803.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"DSC_0803.jpg\"\r\nContent-Type: image/jpeg\r\n">, "commit"=>"Update"
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 2 ORDER BY "users"."id" ASC LIMIT 1
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 2]]
Unpermitted parameters: email, password, password_confirmation, current_password
   (0.1ms)  BEGIN
Command :: file -b --mime-type '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/4e6496f0d2ff11c4404858ce223f6cfa20140303-26872-d6ddec'
Command :: identify -format '%wx%h,%[exif:orientation]' '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/e922c0f4640d374ab418da123a27e38120140303-26872-18rsf8u[0]' 2>/dev/null
Command :: identify -format %m '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/e922c0f4640d374ab418da123a27e38120140303-26872-18rsf8u[0]'
Command :: convert '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/e922c0f4640d374ab418da123a27e38120140303-26872-18rsf8u[0]' -auto-orient -resize "50x50" '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/e922c0f4640d374ab418da123a27e38120140303-26872-18rsf8u20140303-26872-1jmbx70'
Command :: file -b --mime '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/e922c0f4640d374ab418da123a27e38120140303-26872-18rsf8u20140303-26872-1jmbx70'
Command :: identify -format '%wx%h,%[exif:orientation]' '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/e922c0f4640d374ab418da123a27e38120140303-26872-18rsf8u[0]' 2>/dev/null
Command :: identify -format %m '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/e922c0f4640d374ab418da123a27e38120140303-26872-18rsf8u[0]'
Command :: convert '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/e922c0f4640d374ab418da123a27e38120140303-26872-18rsf8u[0]' -auto-orient -resize "400x400" '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/e922c0f4640d374ab418da123a27e38120140303-26872-18rsf8u20140303-26872-hnooz4'
Command :: file -b --mime '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/e922c0f4640d374ab418da123a27e38120140303-26872-18rsf8u20140303-26872-hnooz4'
Command :: file -b --mime-type '/var/folders/1r/kxb0y8ds7jxg5td6d5yy9ytc0000gn/T/739ef719a4c172dcd3daed74ad65998420140303-26872-1f6m43w'
  SQL (3.3ms)  UPDATE "users" SET "avatar_file_name" = $1, "avatar_file_size" = $2, "avatar_updated_at" = $3, "updated_at" = $4 WHERE "users"."id" = 2  [["avatar_file_name", "DSC_0803.jpg"], ["avatar_file_size", 1865679], ["avatar_updated_at", Mon, 03 Mar 2014 18:15:39 UTC +00:00], ["updated_at", Mon, 03 Mar 2014 18:15:40 UTC +00:00]]
[paperclip] deleting /Users/gjores/Desktop/railsprojekt/sportmatch/public/system/users/avatars/000/000/002/original/DSC_1046.jpg
[paperclip] deleting /Users/gjores/Desktop/railsprojekt/sportmatch/public/system/users/avatars/000/000/002/thumb/DSC_1046.jpg
[paperclip] deleting /Users/gjores/Desktop/railsprojekt/sportmatch/public/system/users/avatars/000/000/002/medium/DSC_1046.jpg
   (4.3ms)  COMMIT
Command :: identify -format '%wx%h,%[exif:orientation]' '/Users/gjores/Desktop/railsprojekt/sportmatch/public/system/users/avatars/000/000/002/original/DSC_0803.jpg[0]' 2>/dev/null
  Rendered devise/registrations/crop.html.erb within layouts/application (152.1ms)
  Rendered shared/_flash_messages.html.erb (0.1ms)
Completed 200 OK in 1260ms (Views: 161.5ms | ActiveRecord: 8.5ms)


Started PATCH "/users/2" for 127.0.0.1 at 2014-03-03 19:15:51 +0100
Processing by Users::RegistrationsController#update as HTML
  Parameters: "utf8"=>"â", "authenticity_token"=>"IpUoltuKU4yPbcdH1HSikaEyBsYVoJS+d1G94FZWnbc=", "user"=>"avatar_original_w"=>"2000.0", "avatar_original_h"=>"3008.0", "avatar_box_w"=>"400", "avatar_crop_x"=>"140", "avatar_crop_y"=>"230", "avatar_crop_w"=>"1647", "avatar_crop_h"=>"1235", "avatar_aspect"=>"1.3333333333333333", "commit"=>"Save", "id"=>"2"
  User Load (0.9ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 2 ORDER BY "users"."id" ASC LIMIT 1
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 2]]
  Rendered devise/registrations/edit.html.erb within layouts/application (4.9ms)
  Rendered shared/_flash_messages.html.erb (0.1ms)
Completed 200 OK in 84ms (Views: 12.4ms | ActiveRecord: 1.3ms)

【问题讨论】:

请将代码发布在您显示图像的视图中。 您在视图中看到的文件的实际大小是多少?请注意,当您进行裁剪时,您提供的是纵横比 它正在做一些裁剪。但不是我提供的。所有图像都会调整到模型中定义为中等的高度。现在更新了跟踪。 您能告诉我相关图片的确切尺寸吗? 输出一个宽266px高400px的图片。 【参考方案1】:

Papercrop 不适用于 Turbolinks gem。通过将"data-no-turbolink" 添加到&lt;body&gt; 标记来禁用页面上的Turbolinks。

【讨论】:

以上是关于papercrop won't crop with devise and rails 4的主要内容,如果未能解决你的问题,请参考以下文章

Android MediaStore Crop 功能,如何让选择箭头始终可见?

为啥裁剪后的图像颜色会变深?

无法批量分配受保护的元素:crop_x、crop_y、crop_w、crop_h。设计和 jCrop。 Ruby on Rails [关闭]

使用 sf::st_crop() 和 raster::crop() 裁剪光栅堆栈时出错

Caffe 学习:Crop 层

什么是image crop?