ruby 当使用remote_url和resize_to_[fit/fill/ect]时,带有MiniMagick的载波将黑色背景色添加到transparent .png

63lcw9qa  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(81)

当我通过remote_XXX_url上传没有背景的.png文件时,预期会出现以下上传程序:thumb版本使用resize_to_fit转换为黑色背景。
上传的原始文件与原始文件相同,背景为透明。
如果我通过file_input上传图像,则不会出现此问题。
因此我推断这个问题只发生在对remote_XXX_url文件进行resize_to_XX转换时。你知道发生了什么吗?
carrierwave(2.2.2)-- mini_magick(4.11.0)--原始图像有一个透明的背景。
使用的图像:https://whirlpool-cdn.thron.com/delivery/public/thumbnail/whirlpool/pi-81b54ac7-7614-4a32-bdd1-a3f79db530d5/sckne7/std/320x320/859791401010.jpg?fill=zoom&fillcolor=rgba:255,255,255&scalemode=product
x1c 0d1x缩略图图像已调整大小以适合


未调整大小的图像

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  def store_dir
    "#{ENV['AWS_S3_BUCKET_NAME']}/#{model.class.to_s.underscore}/#{model.id}"
  end

  def extension_allowlist
    %w(jpg jpeg gif png svg webp)
  end

  version :thumb do
    process resize_to_fit: [150, 150]
  end

  def filename
    @name ||= "#{mounted_as}_#{timestamp}.#{file.extension}" if original_filename.present?
  end

  def timestamp
    var = :"@#{mounted_as}_timestamp"
    model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i)
  end
end
kjthegm6

kjthegm61#

原始文件的扩展名似乎为.jpg,但实际上包含PNG图像。

ImageMagick本身就很聪明,能够发现这一点,而且不会给你带来任何麻烦。我不知道也不会使用carrierwave,但它似乎继承了原来的.jpg扩展,并迫使ImageMagick编写一个JPEG,这将使透明区域变黑。我认为是这一行:

@name ||= "#{mounted_as}_#{timestamp}.#{file.extension}" if original_filename.present?

相关问题