carrierwave recreate_versions!破坏原始图像

爱载波。

运行recreate_version时!原始图像的质量大大降低/损坏。

我需要使用carrierwave的recreate_version!通过mount_uploader:image向现有的照片模型添加新的“移动”版本。

现有版本:原始版本,:card和:thumb

再次,当运行recreate_version时!原始图像的质量大大降低了。

市长将原始图像损坏,应丢弃并重新上传图像。

从原始版本创建的:mobile版本具有卓越的质量。

:card和:thumb版本保持不变,没有区别。

原件已损坏。很奇怪。

作为测试,我重新运行了'photo.image.recreate_versions!(:mobile)'几次,以测试不同的参数,以试图抓住腐败的根源(删除不需要的宝石,重新创建:thumb版本等)。 )。但是每次原始图像的质量变得越来越差。

dpi越高,损坏越快:300dpi的第一次通过非常丑陋,100dpi的两次通过是讨厌的,而三遍之后的是72dpi只是犯罪。

腐败在本地主机以及Heroku(登台和生产)上发生。

很奇怪。我已经使用Carrierwave多年了,这是第一次遇到这样的问题。

红宝石“ 2.4.1”

将'5.1.7'设置为

gem'carrierwave',:git =>'https://github.com/carrierwaveuploader/carrierwave.git'

这是设置。

我一次通过Delayed_Job将呼叫传递给载波recreate_version,

<% @user.photos.find_each do |photo| %>
  <% photo.delay.recreate_mobile %> 
<% end %>

和在照片模型中

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'

移除了所有不必要的宝石。仍然是图像损坏问题。

原始图像和所有版本的质量都很好。

在运行recreate_version之后,原始图像已损坏。

关于如何防止recreate_version后原始图像质量损坏的任何想法?

lkf1983 回答:carrierwave recreate_versions!破坏原始图像

已解决:将处理切换到RMagick

在carriewave image_uploader.rb文件中

替换:

包括CarrierWave :: MiniMagick

包括CarrierWave :: Processing :: MiniMagick

具有:

包括CarrierWave :: RMagick

包括CarrierWave :: Processing :: RMagick

MiniMagick被认为具有更好的内存管理,但是已经过时了。加号损坏了图像。如今,RMagick的手指可以更好地进行内存管理。

RMagick获胜!

本文链接:https://www.f2er.com/3129618.html

大家都在问