Увеличение на 80% рассматривается как увеличение на 100% по скрепке (или, возможно, imagemagick/mini_magick)
Первоначально я следовал 3-му изданию учебника ruby on rails для rails 4 ( https://www.railstutorial.org/). После выхода 4-го выпуска учебника для rails 5 я обновил до rails 5, обновил все в своем gemfile, чтобы соответствовать изменениям, упомянутым в учебнике, просмотрел различия в новом учебнике и внес коррективы, где это необходимо, чтобы исправить ситуацию.,
Почти все работает, но я настроил свой пример веб-сайта, чтобы пользователи могли загружать свои собственные аватары, а не полагаться на регистрацию на http://en.gravatar.com/ для загрузки граватаров. Раньше они работали точно так, как предполагалось, но после обновления всего изображения с 80% увеличением обрабатываются так, как если бы они были с 100% увеличением. Я имею в виду следующее: я установил изображения среднего размера 184x184 пикселей. Если вы уменьшите изображение в браузере до 80%, аватары будут правильно отображаться в виде изображений размером 184x184 пикселей. Но если в браузере у вас установлен уровень масштабирования по умолчанию, равный 100%, то по какой-то причине они имеют размер 230x230 пикселей.
После многих испытаний и доработок, это единственная проблема, которую я не смог выяснить причину или как ее исправить. Вот фрагменты кода, отвечающие за работу с аватарами пользователей, расположенные в app/models/user.rb:
has_attached_file :avatar, :styles => { :tiny => "60x60!",
:small => "100x100!",
:medium => "184x184!",
:large => "200x200!" }, :default_url => "/assets/missing_:style.png",
:convert_options => { :tiny => "-strip",
:small => "-strip",
:medium => "-strip",
:large => "-strip" }
validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/
validates_with AttachmentSizeValidator, attributes: :avatar, less_than: 2.megabytes
before_post_process :check_file_size
def check_file_size
valid?
errors[:avatar_file_size].blank?
not avatar.size > 2.megabytes
end
Вот документация по восклицательным знакам, использованным в приведенном выше формате: http://www.imagemagick.org/Usage/resize/ (И да, я попытался использовать обратную косую черту, чтобы сохранить восклицательные знаки в случае, если это было проблемой, но это не так.)
А вот мой гемфайл в его нынешнем виде, хотя я несколько раз менял вещи, пытаясь выяснить все это:
source 'https://rubygems.org'
gem 'rails', '5.0.0.1'
gem 'bcrypt', '3.1.11'
gem 'faker', '1.6.6'
gem 'carrierwave', '0.11.2' # Image uploader in test environment
gem 'mini_magick', '4.6.1' # Image resizing
gem 'fog', '1.38.0' # Image uploader in production environment
gem 'will_paginate', '3.1.0'
gem 'bootstrap-will_paginate', '0.0.10'
gem 'bootstrap-sass', '3.3.6'
gem 'puma', '3.4.0'
gem 'sass-rails', '5.0.6'
gem 'uglifier', '3.0.0'
gem 'coffee-rails', '4.2.1'
gem 'jquery-rails', '4.1.1'
gem 'turbolinks', '5.0.1'
gem 'jbuilder', '2.4.1'
gem 'paperclip', '5.1.0' # For avatar uploading
gem 'simple_form', '3.2.1'
group :development, :test do
gem 'sqlite3', '1.3.12'
gem 'byebug', '9.0.0', platform: :mri
end
group :development do
gem 'web-console', '3.1.1'
gem 'listen', '3.0.8'
gem 'spring', '1.7.2'
gem 'spring-watcher-listen', '2.0.0'
end
group :test do
gem 'rails-controller-testing', '0.1.1'
gem 'minitest-reporters', '1.1.9'
gem 'guard', '2.13.0'
gem 'guard-minitest', '2.4.4'
end
group :production do
gem 'pg', '0.18.4'
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
Кто-нибудь сталкивался с такой проблемой раньше?
1 ответ
Я заметил, что вы используете и скрепку, и несущую волну в своем проекте. Я бы попробовал использовать любой из них. Я бы также предложил использовать только два стиля для запуска, и позже вы можете добавить больше, когда узнаете, в чем проблема. Я использую этот простой пример ниже в своем проекте со скрепкой, который может помочь вам:
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100#" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
Распечатайте аватар в navbar (выдержка из частичного):
<li class="avatar"><%= image_tag(current_user.avatar.url(:thumb)) %></li>
CSS:
.avatar{
background-color: white;
border: 1px solid #d9d9d9;
height: 60px;
width: 60px;
img { width: 100% }
}
По-видимому, я обрезал миниатюру до 100x100# и сжал аватар с высотой и шириной в css, чтобы соответствовать моим потребностям.
Приятного чтения: https://github.com/thoughtbot/paperclip/wiki/Thumbnail-Generation
Я надеюсь, что это помогает