gpt4 book ai didi

php - ImageMagic php模糊洪水填充——制作透明图片

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:07 25 4
gpt4 key购买 nike

我正在编写一个脚本,用透明色去除背景色。

脚本是这样进行的,并给出了正确的结果,可以区分紫红色。

        $val = 65535/40;
//divide by fuzz dilution, 1 is none
$val = floatval($val/0.9);
//create white border
$image->borderImage ( "rgb(255,255,255)" , 1 , 1 );
//make all white fill fuchsia
$image->floodFillPaintImage ( "rgb(255, 0, 255)" ,$val*3, "rgb(255,255,255)", 0 , 0, false);
//make fuchsia transparent
$image->paintTransparentImage("rgb(255,0,255)", 0.0, 0.5);
//remove border 1px that was added above
$image->shaveImage ( 1 , 1 );

但是,它会在图像周围留下颜色痕迹。这是一个示例,说明当我尝试移除带有白色背景的手机周围的边框时 - 您可以清楚地看到边缘上的白色痕迹。

enter image description here

问题是 - 在像素 0,0 上进行泛光填充时,背景颜色颜色错误,我需要一个“模糊”的桶填充函数。 Imagemagic 为floodFillPaintImage 提供了“模糊”算法,但是“模糊”部分的参数只是作为像素的选择,而不是模糊着色。

例如,我有一个 100% 的白色 - 算法正确地选择了完美的白色背景并用一个新的、完美的紫红色图像填充它。当您设置“模糊”参数时,算法会正确地选择 80% 的白色像素(例如),但再次使用 100% 的紫红色为其着色。这就是丑角问题的来源。

ImageMagic 是否支持“真正的”模糊填充和“真正的”模糊 paintTransparentImage?或者有人对如何解决这个问题有更好的想法?

最佳答案

我在这方面做了一些努力。我不能说我对此 100% 满意,但我已经解释了我在做什么并完成了微小的步骤,因此您可以尝试每个步骤并摆弄数字。为简单起见,我只是在命令行中执行此操作。如果您达到它可以按照您的意愿行事的地步,这一切都可以得到简化和加速。

#!/bin/bash

# Get size of original
sz=$(convert -format "%wx%h" phone.png info:)

# Floodfill background area with transparency
convert phone.png -fuzz 5% -fill none -draw 'color 0,0 floodfill' ObjectOnTransparent.png

# Extract alpha channel
convert ObjectOnTransparent.png -alpha extract Alpha.png

# Extract edges of alpha channel - experiment with thickness
convert Alpha.png -edge 1 AlphaEdges.png

# Get difference from background for all pixels
convert phone.png \( +clone -fill white -colorize 100% \) -compose difference -composite Diff.png

# Multiply edges with difference, so only edge pixels will have a chance of getting through to final mask
convert AlphaEdges.png Diff.png -compose multiply -composite EdgexDiff.png

# Extend Alpha by differences at edges
convert Alpha.png EdgexDiff.png -compose add -composite ReEdgedAlpha.png

# Apply new alpha to original image
convert phone.png \( ReEdgedAlpha.png -colorspace gray \) -compose copyopacity -composite RemaskedPhone.png

# Splat RemaskedPhone over red background
convert -size $sz xc:red RemaskedPhone.png -composite Result.png

ObjectOnTransparent.png

enter image description here

Alpha.png

enter image description here

AlphaEdges.png

enter image description here

差异.png

enter image description here

EdgexDiff.png

enter image description here

ReEdgedAlpha.png

enter image description here

结果.png

enter image description here

关于php - ImageMagic php模糊洪水填充——制作透明图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40089196/

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