【问题标题】:Is there anyway I an detect transparent pixels in an image using rmagick?无论如何,我是否可以使用 rmagick 检测图像中的透明像素?
【发布时间】:2019-03-12 06:27:22
【问题描述】:

我正在使用 Rmagick 为 iOS 生成图标。为此,我需要消除透明度。现在我正在停用 alpha 通道并展平所有图像。这是我为此使用的代码。

app_store_icon = ImageList.new(app_store_icon_url)
app_store_icon.alpha(DeactivateAlphaChannel)
app_store_icon.flatten_images

但如果用户上传没有透明度的正确 png 图像,我想避免这个不必要的步骤。那么如何检查图像中是否有任何透明度并仅在需要时才进行上述步骤?

【问题讨论】:

    标签: ruby-on-rails ruby imagemagick rmagick


    【解决方案1】:

    在命令行 Imagemagick 中,提取 alpha 通道并测试其平均值是否小于 1。如果是,则它具有透明度。如果正好为 1,则没有透明度。

    value=$(convert image -alpha extract -format "%[fx:mean]" info:)
    
    or
    
    value=$(convert image -alpha extract -scale 1x1! -format "%[fx:u]" info:)
    
    if [ "$value" = 1 ]; then
    echo "opaque"
    else
    echo "transparent"
    fi
    

    抱歉,我不知道 RMagick。

    【讨论】:

    • 你能告诉我这部分是什么意思吗? -format "%[fx:mean]" info:)。我查看了 rmagick 手册,发现他们有一个带有参数 ExtractAlphaChannel 的 alpha 方法。给出的解释是:通过将 Alpha 通道值复制到所有颜色通道中来创建图像形状的灰度蒙版,然后关闭图像的透明度。我从哪里开始计算平均值?
    • imagemagick.org/script/escape.php。它计算整个图像的平均值并将其报告回来,以便可以将其放入变量中。
    • 完美运行!也感谢您提供指向文档的链接.. 我也找不到有关这些 % 标签如何工作的任何信息!
    • fx 是 ImageMagick 中的计算器。它可用于计算一个值或处理整个图像。见imagemagick.org/script/escape.phpimagemagick.org/Usage/transform/#fx_escapesimagemagick.org/script/fx.php
    【解决方案2】:

    试试这种方式是否适合您:将图像合成为图像大小的白色背景。例如,给定 alpha 通道图像img.png

    require 'rmagick'
    include Magick
    
    image = Magick::Image.read("img.png").first
    w = image.columns
    h = image.rows
    
    if image.alpha?
      bg = Image.new(w,h) { self.background_color = "white" } # create a white background
      image = bg.composite(image, NorthWestGravity, 0, 0, OverCompositeOp) # compose
    end
    
    image.write("img_out.png")
    

    寻找rmagick constants

    【讨论】:

    • 但这也是在浪费不必要的资源,我正在努力避免这种情况。我想检查透明度并仅在检测到时执行这些步骤
    • 也许你正在寻找实例方法alpha?: rmagick.github.io/image1.html#alpha_q |以防万一,请参阅我的编辑。
    • 我刚刚检查了 image.alpha?并且对于其中具有透明度的图像返回 false。
    • 我测试了一些图片,alpha? 对我来说效果很好。
    猜你喜欢
    • 2012-04-27
    • 2012-02-03
    • 2017-02-15
    • 2014-03-30
    • 2021-12-31
    • 2011-02-03
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    相关资源
    最近更新 更多