【问题标题】:Set image color to match background color php设置图像颜色以匹配背景颜色php
【发布时间】:2017-09-11 13:50:34
【问题描述】:

我正在使用Imagemagick 处理php 中的图像。我在ImageMagick 不明智,所以不能这样做。我有2张图片,1张是背景,另一张在上面。最上面的那个是灰色的png。而背景图像可以是任何图像。我想设置我的顶部图像的颜色以匹配背景图像的大多数颜色。

例如,这是一张以米色/粉红色为主色的随机背景图片

这是我的头像

我希望我上面的图片改变它的颜色以匹配背景图片的大多数颜色,如上图,它应该是这样的

有可能吗?

【问题讨论】:

    标签: php html image image-processing imagemagick


    【解决方案1】:

    我今天不想编写和调试大量 PHP,但可以在命令行上向您展示一些您应该能够翻译成 PHP 的技术。

    您可以通过将背景图像的大小调整为单个 1x1 像素然后以 RGB 术语打印其值来获取背景图像的平均值:

    convert background.jpg -scale 1x1 -format "%[pixel:p{0,0}]" info:
    srgb(219,199,164)
    

    如果我取该值并从中制作一个实心正方形,您会看到它是您建议的米色:

    convert -size 100x100 xc:"srgb(219,199,164)" mean.png
    

    你或许可以使用getImageChannelStatistics() 在 PHP 中。

    如果我现在采用该颜色,并将其设置为着色的填充颜色并应用着色,我会得到:

    convert top.png -fill "srgb(219,199,164)" -tint 100% result.png
    

    在 PHP 中,您会看到 tintImage()

    右侧发生了可怕的事情 - 我不明白,但如果我从您的顶部图像中提取不透明度并将其重新应用于结果图像,它就会消失:

    convert top.png -alpha extract alpha.pgm
    convert top.png -fill "srgb(219,199,164)" -tint 100% alpha.pgm -compose copyopacity -composite result.png
    

    【讨论】:

    • @fmw42 感谢您分享您的见解和经验。你知道图片右侧发生了什么吗?或者为什么我需要再次复制原始图像的不透明度?
    • 对不起,我在上面马克的评论之前不小心删除了我的评论。我所说的是,我建议将 -colorspace sRGB 用于正常(非线性)颜色,而不是 -colorspace RGB 用于线性(和更深)颜色。
    • 马克,你的简单 tint 命令(以 result.png 结尾)对我来说很好用。我在使用 IM 6.9.8.3 Q16 Mac OSX 的右侧看不到任何条纹。也许是上传过程改变了图像格式或删除了透明度。如果我删除透明度,它会显示条纹。请注意,您还应该始终在 -compose copy_opacity 之前添加 -alpha off。但那是在您处理的后期。
    • P.S.这个上传系统或主机比较奇怪。我尝试使用 RGB 和 sRGB 将平均颜色作为色板的示例,并且 RGB 在我的计算机上对我来说更暗,但是当我上传它时,它显示更亮。所以我删除了那个帖子。
    • 感谢@MarkSetchell 的帮助。我已经按照你的建议解决了这个问题。但是为了您的帮助,我正在投票并选择您的回答。再次感谢。
    【解决方案2】:

    我自己通过这两行代码解决了

    exec("convert fabric.jpg -scale 1x1\! -format '%[pixel:u]' info:-", $a);
    exec('convert arm-shadow.png -fuzz 10% -fill "'.$a[0].'" +opaque black -fill "'.$a[0].'" -opaque black foo.png');
    

    【讨论】:

      猜你喜欢
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      相关资源
      最近更新 更多