很早之前ios开发用到的图片处理的方法,美工只给了一张png图然后用来用来做一个蒙层的
+(UIImage*)imageToClear:(UIImage*) anImage
{
CGImageRef imageRef = anImage.CGImage;
size_t width = CGImageGetWidth(imageRef); //获取图片像素的宽
size_t height = CGImageGetHeight(imageRef); //获取图片像素的高
size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef);
size_t bitsPerPixel = CGImageGetBitsPerPixel(imageRef);
size_t bytesPerRow = CGImageGetBytesPerRow(imageRef);
CGColorSpaceRef colorSpace = CGImageGetColorSpace(imageRef);
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
bool shouldInterpolate = CGImageGetShouldInterpolate(imageRef);
CGColorRenderingIntent intent = CGImageGetRenderingIntent(imageRef);
CGDataProviderRef dataProvider = CGImageGetDataProvider(imageRef);
CFDataRef data = CGDataProviderCopyData(dataProvider);
UInt8 *buffer = (UInt8*)CFDataGetBytePtr(data);
NSUInteger x, y;
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
UInt8 *tmp; //UInt8 8位无符号整型
tmp = buffer + y * bytesPerRow + x * 4; //每个像素4个通道 *4代表下一个像素
UInt8 alpha;
alpha= *(tmp+3); //rgba alpha通道排第四个
if(alpha>0) //下面这个 意思是只要图片上的色素都是非纯透明的 都改成纯白色,否则还是纯透明
{
*(tmp+3)=255;
*(tmp + 0) = 255;
*(tmp + 1) = 255;
*(tmp + 2) = 255;
}else
{
*(tmp+3)=0;
*(tmp + 0) = 0;
*(tmp + 1) = 0;
*(tmp + 2) = 0;
}
}
}
//生成图片返回
CFDataRef effectedData = CFDataCreate(NULL, buffer, CFDataGetLength(data));
CGDataProviderRef effectedDataProvider = CGDataProviderCreateWithCFData(effectedData);
CGImageRef effectedCgImage = CGImageCreate(
width, height,
bitsPerComponent, bitsPerPixel, bytesPerRow,
colorSpace, bitmapInfo, effectedDataProvider,
NULL, shouldInterpolate, intent);
UIImage *effectedImage = [[UIImage alloc] initWithCGImage:effectedCgImage];
CGImageRelease(effectedCgImage);
CFRelease(effectedDataProvider);
CFRelease(effectedData);
CFRelease(data);
return effectedImage ;
}
注:如果上述处理的图片是网路下载下来的 或者sd_webimage down下来的 处理图片alpha通道之前建议先把图片存到cache 否则可能会崩
存图片的代码如下:
#define HOME_PATH NSHomeDirectory()
#define LIBRARY_PATH [HOME_PATH stringByAppendingPathComponent:@"Library/Caches"]
+(UIImage *)saveImageWithImage:(UIImage*)image WithString:(NSString *)nameString
{
NSData *imageData = UIImagePNGRepresentation(image);
NSString *fileName = [NSString stringWithFormat:@"%@.png", nameString];
NSString *picPath=[NSString stringWithFormat:@"%@/%@",LIBRARY_PATH,fileName];
if([[NSFileManager defaultManager]fileExistsAtPath:picPath])
{
[[NSFileManager defaultManager]removeItemAtPath:picPath error:nil];
}
[[NSFileManager defaultManager] createFileAtPath:picPath contents:imageData attributes:nil];
NSData* newData = [NSData dataWithContentsOfFile:picPath];
UIImage *image3=[UIImage imageWithData:newData];
return image3;
}