改变图像尺寸后,图像的透明部分变黑

我试图根据我的看法改变图像大小,所以我写了这个代码。

-(UIImage *)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize { // Create a bitmap context. UIGraphicsBeginImageContextWithOptions(newSize, YES, [UIScreen mainScreen].scale); [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); NSData *imageData = UIImagePNGRepresentation(newImage); UIGraphicsEndImageContext(); UIImage *img=[UIImage imageWithData:imageData]; return img; } 

它工作的很好,但是当我得到图像时,它的透明部分变成黑色,也许它将它转换成JPG。 我使用了一个PNG图像。 有任何想法吗? 提前致谢。

您应该使用NO作为第二个参数,切换图像的透明度。

 UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale); 

查看苹果的文档了解更多细节。

参考https://developer.apple.com/documentation/uikit/1623912-uigraphicsbeginimagecontextwitho?language=objc

方法:

 void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale); 

不透明的地方

opaque指示位图是否不透明的布尔标志。 如果您知道位图完全不透明,请指定YES忽略Alpha通道并优化位图的存储。 指定NO意味着位图必须包含一个alpha通道来处理任何部分透明的像素。

您可以使用此function来configuration绘图环境以渲染到位图中。 位图的格式是使用主机字节顺序的ARGB 32位整数像素格式。 如果opaque参数为YES,则alpha通道将被忽略,位图将被视为完全不透明(kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host)。 否则,每个像素使用预先多元化的ARGB格式(kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host)。

你应该把透明的图像放在你的情况不透明