несущая волнаискажает исходное изображение - PullRequest
0 голосов
/ 10 ноября 2019

Любовь несущей волны.

При запуске пересоздать_версию! качество ОРИГИНАЛЬНОГО изображения значительно ухудшено / искажено.

Мне нужно использовать 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?

...