gpt4 book ai didi

ruby-on-rails - 回形针 imagemagick 转换为灰度并裁剪以适合 144x144#

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:12 26 4
gpt4 key购买 nike

客户端.rb

  has_attached_file :avatar,
:path => ":rails_root/public/system/:attachment/:id/:style/:filename",
:url => "/system/:attachment/:id/:style/:filename",
:styles => {:thumb => "144x144#", :grayscale => { :processors => [:grayscale] }}

thumb 版本效果很好,图像被裁剪到所需的大小,灰度只将该图像转换为灰度,但图像没有被裁剪,这是我在 StackOverflow 上找到的灰度生成器:

lib/grayscale.rb

module Paperclip
# Handles grayscale conversion of images that are uploaded.
class Grayscale < Processor

def initialize file, options = {}, attachment = nil
super
@format = File.extname(@file.path)
@basename = File.basename(@file.path, @format)
end

def make
src = @file
dst = Tempfile.new([@basename, @format])
dst.binmode

begin
parameters = []
parameters << ":source"
parameters << "-colorspace Gray"
parameters << ":dest"

parameters = parameters.flatten.compact.join(" ").strip.squeeze(" ")

success = Paperclip.run("convert", parameters, :source => "#{File.expand_path(src.path)}[0]", :dest => File.expand_path(dst.path))
rescue PaperclipCommandLineError => e
raise PaperclipError, "There was an error during the grayscale conversion for #{@basename}" if @whiny
end

dst
end
end
end

要将图像转换为灰度图像,一些参数将以数组的形式发送到 imagemagick,问题 是 - 我必须将什么参数发送到 imagemagick,以便它完全按照 执行操作” 144x144#" 用回形针做。

我试着按照日志查看这个“144x144#”在日志中是什么样子,它看起来像这样:-crop '144x144+30+0',我尝试在我的生成器中使用它并将其作为参数发送,例如:

 parameters = []
parameters << ":source"
parameters << "-crop '144x144+30+0'"
parameters << "-colorspace Gray"
parameters << ":dest"

如果我使用之前上传的同一张图片,看起来效果不错,如果我上传另一张图片,则图片被裁剪得完全错误。所以我得出的结论是 param: -crop '144x144+30+0' 由 paperclip 生成的是针对特定图像尺寸的,而对于另一个具有不同尺寸的图像,通常会将不同的参数发送到适合 144px。

我如何在生成器中裁剪图像以适应来自回形针的 144x144# 或者我需要发送到 imagemagick 的参数是什么来实现这一点。谢谢。

最佳答案

我决定走另一条路,所以我将只使用具有所需大小的裁剪文件,并使用 imagemagick 将其转换为灰度,并在保存模型后将其保存到正确的文件夹中。可以删除灰度处理器,因为我使用系统命令来处理 imagemagick。

附注这个答案可能有一些缺点,但目前我找不到任何缺点。

客户端.rb

  has_attached_file :avatar,
:path => ":rails_root/public/system/:attachment/:id/:style/:filename",
:url => "/system/:attachment/:id/:style/:filename",
:styles => {:thumb => "144x144#", :grayscale => "144x144#"}

after_save :convert_grayscale

def convert_grayscale
system "convert public/system/avatars/#{self.id}/thumb/#{self.avatar.original_filename} -fx '(r+g+b)/3' public/system/avatars/#{self.id}/grayscale/#{self.avatar.original_filename}"
end

结果

enter image description here

关于ruby-on-rails - 回形针 imagemagick 转换为灰度并裁剪以适合 144x144#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com