亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用黑白蒙版遮罩 PNG 圖像

使用黑白蒙版遮罩 PNG 圖像

PHP
白衣染霜花 2022-08-19 15:53:43
我有下面的圖像(請注意透明背景):我還有一個相同大小的黑白面具:我想“裁剪”這件衣服,只得到黑色圓圈中包含的第一幅圖像的一部分。我嘗試了許多不同的方法,但它們不起作用或太慢:1) ImageMagick (commandline) <== 我可以使用哪個命令來實現此目的?我嘗試乘法和復制不透明度,但它們不起作用2)WideImage正在工作:但它需要超過12秒。$maskedImage = $source->applyMask($mask);如果可能的話,我對ImageMagick解決方案感興趣。
查看完整描述

4 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

您的 ImageMagick 版本似乎太舊,無法包含“copyalpha”撰寫運算符。這是獲得結果的另一種方法...

convert dress.png \( circle.png -negate \) \
   \( -clone 0 -transparent red +transparent red \) -insert 0 -composite result.png

它會在主圖像中讀取,然后在蒙版圖像中讀取并否定它,然后創建一個透明層,并使用“-insert”將其移動到列表中的第一個位置。ImageMagick 對包含三個輸入圖像的“-composite”的默認處理是使用第三個圖像(現在是帶有黑色圓圈的圖像)作為 Alpha 蒙版。你仍然需要“否定”那個面具,或者制作一個黑白倒置的新面具。

用于創建透明畫布的方法是在括號內讀取其他圖像之一,將紅色所有內容更改為透明,然后將紅色的所有內容更改為透明。這將導致一個完全透明的畫布用作復合列表中的第一個圖像,即目標圖像。


查看完整回答
反對 回復 2022-08-19
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

在一天結束時,我繼續使用WideImage,它非常慢,但效果很好。這是我用來遮罩圖像的類:


<?php


namespace AppBundle\Service\Import;


use WideImage\WideImage;


class ImageMasker

{

    /**

     * @var string

     */

    private $tempDirectory;


    public function __construct(string $tempDirectory)

    {

        $this->tempDirectory = $tempDirectory;

    }


    /**

     * @param string $sourcePath

     * @param string $maskPath

     */

    public function mask($sourcePath, $maskPath)

    {

        $source = WideImage::load($sourcePath);

        $mask   = WideImage::load($maskPath);


        $tempFilename = uniqid().'.png';

        $tempPath     = rtrim($this->tempDirectory, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$tempFilename;


        // applies the mask and saves the file

        $maskedImage = $source->applyMask($mask);

        $maskedImage->saveToFile($tempPath);


        return $tempPath;

    }

}


查看完整回答
反對 回復 2022-08-19
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

我想你想要這個:

magick dress.png \( mask.png -alpha off -negate \) -compose copyalpha -composite result.png


http://img1.sycdn.imooc.com//62ff41d200017c1504560335.jpg

或者,如果您不喜歡括號,請加載蒙版并首先整理您的 Alpha 通道,然后加載禮服,然后在合成之前加載順序:+swap

magick mask.png -alpha off -negate dress.png +swap  -compose copyalpha -composite result.png



查看完整回答
反對 回復 2022-08-19
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

它應該在ImageMagick 6或ImageMagick 7中使用copy_opacity而不是copy_alpha。這對我來說很好:

輸入:

http://img1.sycdn.imooc.com//62ff41df0001eb3504870618.jpg

面具:

http://img1.sycdn.imooc.com//62ff41e70001e9d204790429.jpg

convert dress.png \( mask.png -negate \) -alpha off -compose copy_opacity -composite result.png

http://img1.sycdn.imooc.com//62ff41f10001ae4203760279.jpg

上述使用轉換的命令適用于ImageMagick 6。如果使用 ImageMagick 7,請將轉換更改為 magick。兩者都對我有用。



查看完整回答
反對 回復 2022-08-19
  • 4 回答
  • 0 關注
  • 246 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號