gpt4 book ai didi

ios - 合并两个透明图像而不丢失透明度

转载 作者:行者123 更新时间:2023-11-28 21:33:15 24 4
gpt4 key购买 nike

我有两个具有透明背景的 PNG 图像。我需要在不丢失透明背景的情况下将它们合并为一张图像。

我用过这段代码

  UIGraphicsBeginImageContext(firstImage.size);
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSaveGState(context);

CGContextTranslateCTM(context, 0, firstImage.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGRect rect = CGRectMake(0, 0, firstImage.size.width,firstImage.size.height);
// draw white background to preserve color of transparent pixels
CGContextSetBlendMode(context, kCGBlendModeDarken);
[[UIColor whiteColor] setFill];
CGContextFillRect(context, rect);

CGContextSaveGState(context);
CGContextRestoreGState(context);

// draw original image
CGContextSetBlendMode(context, kCGBlendModeDarken);
CGContextDrawImage(context, rect, firstImage.CGImage);

// tint image (loosing alpha) - the luminosity of the original image is preserved
CGContextSetBlendMode(context, kCGBlendModeDarken);
//CGContextSetAlpha(context, .85);
[[UIColor colorWithPatternImage:secondImage] setFill];
CGContextFillRect(context, rect);


CGContextSaveGState(context);
CGContextRestoreGState(context);

// mask by alpha values of original image
CGContextSetBlendMode(context, kCGBlendModeDestinationIn);
CGContextDrawImage(context, rect, firstImage.CGImage);

// image drawing code here
CGContextRestoreGState(context);
UIImage *coloredImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return coloredImage;

但它返回一张白色背景的图像。

知道为什么吗?

最佳答案

如果您的两个图像都具有透明度,那么使用普通混合模式绘制它们都不会以任何方式“失去”透明度。

你应该能够在另一个之上绘制一个:

UIGraphicsBeginImageContext(firstImage.size); // Assumes the first image is the same size as the second image.
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextTranslateCTM(context, 0, firstImage.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

CGContextDrawImage(context, rect, firstImage.CGImage);
CGContextDrawImage(context, rect, secondImage.CGImage);

UIImage *coloredImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return coloredImage;

您也不需要保存和恢复上下文的图形状态(至少在所有绘图之外),除非您要重用上下文。

关于ios - 合并两个透明图像而不丢失透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35000276/

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