找回密码
 会员注册
查看: 20|回复: 0

知识点:iOSMac去掉截图Alpha通道

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64128
发表于 2024-10-12 09:25:32 | 显示全部楼层 |阅读模式
在项目开发过程中,遇到一种很奇怪的现象:同一张图片,在iOS、Mac端能很正常的显示出来,但在H5、Android端却显示不出来。经过对比正常的图片与这张异常图片,发现区别在于异常图片Alpha通道一项的值为“是”,而正常能够显示出来的图片该值为“否”。查看图片简介如下:那么怎么去掉一张截图的Alpha通道呢?1. 方法一 -(void)converterNSString*)name{NSLog(@"NAME:%@",name);NSURL*url=[NSURLfileURLWithPath:name];CGImageSourceRefsource;NSImage*srcImage=[[NSImagealloc]initWithContentsOfURL:url];;NSLog(@"URL:%@",url);source=CGImageSourceCreateWithData((__bridgeCFDataRef)[srcImageTIFFRepresentation],NULL);CGImageRefimageRef=CGImageSourceCreateImageAtIndex(source,0,NULL);CGRectrect=CGRectMake(0.f,0.f,CGImageGetWidth(imageRef),CGImageGetHeight(imageRef));CGContextRefbitmapContext=CGBitmapContextCreate(NULL,rect.size.width,rect.size.height,CGImageGetBitsPerComponent(imageRef),CGImageGetBytesPerRow(imageRef),CGImageGetColorSpace(imageRef),kCGImageAlphaNoneSkipLast|kCGBitmapByteOrder32Little);CGContextDrawImage(bitmapContext,rect,imageRef);CGImageRefdecompressedImageRef=CGBitmapContextCreateImage(bitmapContext);NSImage*finalImage=[[NSImagealloc]initWithCGImage:decompressedImageRefsize:NSZeroSize];NSData*imageData=[finalImageTIFFRepresentation];NSBitmapImageRep*imageRep=[NSBitmapImageRepimageRepWithData:imageData];NSDictionary*imageProps=[NSDictionarydictionaryWithObject:[NSNumbernumberWithFloat:0.9]forKey:NSImageCompressionFactor];imageData=[imageReprepresentationUsingType:NSPNGFileTypeproperties:imageProps];[imageDatawriteToFile:nameatomically:NO];CGImageRelease(decompressedImageRef);CGContextRelease(bitmapContext);}2. 方法二 CGImageRefimageRef=[imageCGImageForProposedRect:&((CGRect){0,0,image.size.width,image.size.height})context:nilhints:nil];NSIntegerbytesPerRow=CGImageGetBytesPerRow(imageRef);NSIntegerbitsPerPixel=CGImageGetBitsPerPixel(imageRef);NSIntegerbitsPerSample=16;boolhasAlpha=NO;NSIntegersamplesPerPixel=hasAlpha4:3;///画布NSBitmapImageRep*rep=[[NSBitmapImageRepalloc]initWithBitmapDataPlanes:NULLpixelsWide:image.size.widthpixelsHigh:image.size.heightbitsPerSample:bitsPerSamplesamplesPerPixel:samplesPerPixelhasAlpha:NOisPlanar:NOcolorSpaceName:NSCalibratedRGBColorSpacebytesPerRow:bytesPerRow*(bitsPerSample/8)bitsPerPixel:bitsPerPixel*(bitsPerSample/8)];NSGraphicsContext*context=[NSGraphicsContextgraphicsContextWithBitmapImageRep:rep];[NSGraphicsContextsetCurrentContext:context];[imagedrawInRect:NSMakeRect(0,0,image.size.width,image.size.height)fromRect:NSZeroRectoperation:NSCompositingOperationCopyfraction:1.0];NSData*data=[reprepresentationUsingType:NSBitmapImageFileTypePNGproperties{}];NSImage*resultImage=[[NSImagealloc]initWithData:data];方法不一样,思路一致,可以根据自己的需求调整参数。输出结果后,再次打开图片简介查看Alpha通道值。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 13:16 , Processed in 0.398838 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表