4 回答

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 蒙版。你仍然需要“否定”那個面具,或者制作一個黑白倒置的新面具。
用于創建透明畫布的方法是在括號內讀取其他圖像之一,將紅色所有內容更改為透明,然后將不紅色的所有內容更改為透明。這將導致一個完全透明的畫布用作復合列表中的第一個圖像,即目標圖像。

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;
}
}

TA貢獻1895條經驗 獲得超7個贊
我想你想要這個:
magick dress.png \( mask.png -alpha off -negate \) -compose copyalpha -composite result.png
或者,如果您不喜歡括號,請加載蒙版并首先整理您的 Alpha 通道,然后加載禮服,然后在合成之前加載順序:+swap
magick mask.png -alpha off -negate dress.png +swap -compose copyalpha -composite result.png

TA貢獻1853條經驗 獲得超9個贊
它應該在ImageMagick 6或ImageMagick 7中使用copy_opacity而不是copy_alpha。這對我來說很好:
輸入:
面具:
convert dress.png \( mask.png -negate \) -alpha off -compose copy_opacity -composite result.png
上述使用轉換的命令適用于ImageMagick 6。如果使用 ImageMagick 7,請將轉換更改為 magick。兩者都對我有用。
- 4 回答
- 0 關注
- 246 瀏覽
添加回答
舉報