Любовь несущей волны.
При запуске пересоздать_версию! качество ОРИГИНАЛЬНОГО изображения значительно ухудшено / искажено.
Мне нужно использовать Reachate_version от носителя! чтобы добавить новую «мобильную» версию в существующую модель Photo с помощью mount_uploader: image.
Существующая версия: original,: card and: thumb
Опять же, при запуске refreshate_version! качество ОРИГИНАЛЬНОГО изображения значительно снижается.
Повреждение изображения мэра оригинала до такой степени, что изображение должно быть сброшено и повторно загружено.
Мобильная версия, созданная на основе новойоригинал отличного качества.
И версии: card и: thumb остаются без изменений.
Только оригинал поврежден. Странно.
В качестве теста я несколько раз перезапускал 'photo.image.recreate_versions! (: Mobile)', чтобы протестировать различные параметры, пытаясь поймать виновника коррупции (удалены ненужные самоцветы, воссоздать:версия для большого пальца и т. д.). Но каждый раз качество исходного изображения становилось все хуже и хуже.
И чем выше значение dpi, тем быстрее происходит искажение: 300 точек на дюйм сначала проходят безобразно, 100 точек на дюйм два прохода, а 72 точки на дюйм после трех проходов просто преступно.
Коррупция происходит на локальном хосте, а также на Heroku (как постановка, так и производство).
Странно. Я использовал Carrierwave в течение многих лет, и это впервые с такой проблемой.
ruby '2.4.1'
rails '5.1.7'
gem 'carrierwave',: git =>' https://github.com/carrierwaveuploader/carrierwave.git'
Вот настройка.
Я передаю вызов на операторскую связь в сети в режиме досрочного восстановления через Задержка_Джоб по одному пользователю за раз
<% @user.photos.find_each do |photo| %>
<% photo.delay.recreate_mobile %>
<% end %>
и в модели Photo
class Photo < ApplicationRecord
def recreate_mobile
self.image.recreate_versions!(:mobile) if self.image?
end
end
, и в ImageUploader
class ImageUploader < CarrierWave::Uploader::Base
include ::CarrierWave::Backgrounder::Delay
include CarrierWave::MiniMagick
include CarrierWave::BombShelter
include CarrierWave::Processing::MiniMagick
storage :aws
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
process resize_to_limit: [1350, 1350]
process :store_dimensions
version :mobile do
process resize_to_limit: [400, 600]
end
version :card do
process resize_to_limit: [300, 460]
end
version :thumb, from_version: :card do
process resize_to_limit: [100, 150]
end
private
def store_dimensions
if file && model
model.width, model.height = ::MiniMagick::Image.open(file.file)[:dimensions]
end
end
def max_pixel_dimensions
[6024, 6024]
end
def extension_white_list
%w(jpg jpeg gif png)
end
end
, и в драгоценных камнях
gem 'carrierwave-aws'
gem 'carrierwave', :git => 'https://github.com/carrierwaveuploader/carrierwave.git'
gem 'carrierwave_backgrounder'
gem 'carrierwave-bombshelter'
gem 'carrierwave-processing'
gem 'mini_magick'
gem 'remotipart', '~> 1.2'
Удалены ВСЕ ненужные драгоценные камни. По-прежнему проблема с повреждением изображения.
Качество исходного изображения и всех версий превосходное.
Это только после запуска refreshate_version исходное изображение повреждено.
Есть ли какие-либо идеи о том, как предотвратить искажение исходного качества изображения после restate_version?