imagemagick复合两个png并保持它的alpha

时间:2015-12-02 04:34:06

标签: imagemagick

我想使用以下方法为my_own_png.png文件添加水印:

class LoginViewControllerTests: XCTestCase {
    func testTokenExists() {
        let mockContext = MockContextUtils.getMockContext()
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        appDelegate.managedObjectContext = mockContext
        let sut = LoginViewController()
        let _ = sut.view // Apparently this renders the view; I set a breakpoint, viewDidLoad is called
        XCTAssertNotNil(sut.token) // FAILS, BECAUSE APPDELEGATE CALLS APP DATABASE, AND NOT MOCK.
    }
}

result.png不是我的意思,我想保留my_own_png.png的alpha。

请帮忙〜谢谢。

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点......

首先,您可以使用当前处理,我认为您理解并且满意,然后将原始图像的alpha复制回结果的顶部,如下所示:

# Your current processing
composite -dissolve 10% ... result.png

# Now add back the original image's alpha
convert result.png my_own_png.png -compose CopyOpacity -composite result.png

或者,您可以使用convert而不是composite一次性完成所有操作,它看起来像这样但是很难确定没有看到您实际在做什么:

convert my_own_png.png \
   \( +clone -gravity center watermark_350.png -compose dissolve -define compose:args='10' -composite \) \
   +swap -compose CopyOpacity -composite result.png

这基本上会加载你的my_own_png.png并将其放在一边。然后它复制它并用括号内的水印溶解。在括号之后,交换图像的顺序,使得带水印的图像首先在列表中,并且原始png在列表中是第二个。然后它从原始图像复制alpha并将其应用于水印图像 - 希望: - )