iOS開發(fā)中 UIImageView相關(guān)的小知識點

1、給一個view截圖

UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);

[view.layer?renderInContext:UIGraphicsGetCurrentContext()];

UIImage?*img?=?UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

2、顏色轉(zhuǎn)圖片

+ (UIImage *)cl_imageWithColor:(UIColor *)color {

CGRect?rect?=?CGRectMake(0.0f,?0.0f,?1.0f,?1.0f);

UIGraphicsBeginImageContext(rect.size);

CGContextRef?context?=?UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context,?[color?CGColor]);

CGContextFillRect(context,?rect);

UIImage?*image?=?UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

returnimage;

}

3、判斷圖片類型

//通過圖片Data數(shù)據(jù)第一個字節(jié) 來獲取圖片擴展名

-?(NSString?*)contentTypeForImageData:(NSData?*)data

{

uint8_t?c;

[data?getBytes:&c?length:1];

switch(c)

{

case0xFF:

return@"jpeg";

case0x89:

return@"png";

case0x47:

return@"gif";

case0x49:

case0x4D:

return@"tiff";

case0x52:

if([data?length]?<?12)?{

returnnil;

}

NSString?*testString?=?[[NSString?alloc]?initWithData:[data?subdataWithRange:NSMakeRange(0,?12)]?encoding:NSASCIIStringEncoding];

if([testString?hasPrefix:@"RIFF"]

&&?[testString?hasSuffix:@"WEBP"])

{

return@"webp";

}

returnnil;

}

returnnil;

}

4、image圓角

- (UIImage *)circleImage

{

//?NO代表透明

UIGraphicsBeginImageContextWithOptions(self.size,?NO,?1);

//?獲得上下文

CGContextRef?ctx?=?UIGraphicsGetCurrentContext();

//?添加一個圓

CGRect?rect?=?CGRectMake(0,?0,?self.size.width,?self.size.height);

//?方形變圓形

CGContextAddEllipseInRect(ctx,?rect);

//?裁剪

CGContextClip(ctx);

//?將圖片畫上去

[self?drawInRect:rect];

UIImage?*image?=?UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

returnimage;

}

5、image拉伸

+ (UIImage *)resizableImage:(NSString *)imageName

{

UIImage?*image?=?[UIImage?imageNamed:imageName];

CGFloat?imageW?=?image.size.width;

CGFloat?imageH?=?image.size.height;

return[image?resizableImageWithCapInsets:UIEdgeInsetsMake(imageH?*?0.5,?imageW?*?0.5,?imageH?*?0.5,?imageW?*?0.5)?resizingMode:UIImageResizingModeStretch];

}

6、取圖片某一點的顏色

if(point.x < 0 || point.y < 0)returnnil;

CGImageRef?imageRef?=?self.CGImage;

NSUInteger?width?=?CGImageGetWidth(imageRef);

NSUInteger?height?=?CGImageGetHeight(imageRef);

if(point.x?>=?width?||?point.y?>=?height)returnnil;

unsigned?char?*rawData?=?malloc(height?*?width?*?4);

if(!rawData)returnnil;

CGColorSpaceRef?colorSpace?=?CGColorSpaceCreateDeviceRGB();

NSUInteger?bytesPerPixel?=?4;

NSUInteger?bytesPerRow?=?bytesPerPixel?*?width;

NSUInteger?bitsPerComponent?=?8;

CGContextRef?context?=?CGBitmapContextCreate(rawData,

width,

height,

bitsPerComponent,

bytesPerRow,

colorSpace,

kCGImageAlphaPremultipliedLast

|?kCGBitmapByteOrder32Big);

if(!context)?{

free(rawData);

returnnil;

}

CGColorSpaceRelease(colorSpace);

CGContextDrawImage(context,?CGRectMake(0,?0,?width,?height),?imageRef);

CGContextRelease(context);

int?byteIndex?=?(bytesPerRow?*?point.y)?+?point.x?*?bytesPerPixel;

CGFloat?red???=?(rawData[byteIndex]?????*?1.0)?/?255.0;

CGFloat?green?=?(rawData[byteIndex?+?1]?*?1.0)?/?255.0;

CGFloat?blue??=?(rawData[byteIndex?+?2]?*?1.0)?/?255.0;

CGFloat?alpha?=?(rawData[byteIndex?+?3]?*?1.0)?/?255.0;

UIColor?*result?=?nil;

result?=?[UIColor?colorWithRed:red?green:green?blue:blue?alpha:alpha];

free(rawData);

returnresult;

7、判斷該圖片是否有透明度通道

- (BOOL)hasAlphaChannel

{

CGImageAlphaInfo?alpha?=?CGImageGetAlphaInfo(self.CGImage);

return(alpha?==?kCGImageAlphaFirst?||

alpha?==?kCGImageAlphaLast?||

alpha?==?kCGImageAlphaPremultipliedFirst?||

alpha?==?kCGImageAlphaPremultipliedLast);

}

8、獲得灰度圖

+ (UIImage*)covertToGrayImageFromImage:(UIImage*)sourceImage

{

int?width?=?sourceImage.size.width;

int?height?=?sourceImage.size.height;

CGColorSpaceRef?colorSpace?=?CGColorSpaceCreateDeviceGray();

CGContextRef?context?=?CGBitmapContextCreate?(nil,width,height,8,0,colorSpace,kCGImageAlphaNone);

CGColorSpaceRelease(colorSpace);

if(context?==?NULL)?{

returnnil;

}

CGContextDrawImage(context,CGRectMake(0, 0, width, height), sourceImage.CGImage);

CGImageRef contextRef = CGBitmapContextCreateImage(context);

UIImage *grayImage = [UIImage imageWithCGImage:contextRef];

CGContextRelease(context);

CGImageRelease(contextRef);

returngrayImage;

}

9、合并兩個圖片

+ (UIImage*)mergeImage:(UIImage*)firstImage withImage:(UIImage*)secondImage {

CGImageRef?firstImageRef?=?firstImage.CGImage;

CGFloat?firstWidth?=?CGImageGetWidth(firstImageRef);

CGFloat?firstHeight?=?CGImageGetHeight(firstImageRef);

CGImageRef?secondImageRef?=?secondImage.CGImage;

CGFloat?secondWidth?=?CGImageGetWidth(secondImageRef);

CGFloat?secondHeight?=?CGImageGetHeight(secondImageRef);

CGSize?mergedSize?=?CGSizeMake(MAX(firstWidth,?secondWidth),?MAX(firstHeight,?secondHeight));

UIGraphicsBeginImageContext(mergedSize);

[firstImage?drawInRect:CGRectMake(0,?0,?firstWidth,?firstHeight)];

[secondImage?drawInRect:CGRectMake(0,?0,?secondWidth,?secondHeight)];

UIImage?*image?=?UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

returnimage;

}

10、為imageView添加倒影

CGRect frame = self.frame;

frame.origin.y?+=?(frame.size.height?+?1);

UIImageView?*reflectionImageView?=?[[UIImageView?alloc]?initWithFrame:frame];

self.clipsToBounds?=?TRUE;

reflectionImageView.contentMode?=?self.contentMode;

[reflectionImageView?setImage:self.image];

reflectionImageView.transform?=?CGAffineTransformMakeScale(1.0,?-1.0);

CALayer?*reflectionLayer?=?[reflectionImageView?layer];

CAGradientLayer?*gradientLayer?=?[CAGradientLayer?layer];

gradientLayer.bounds?=?reflectionLayer.bounds;

gradientLayer.position?=?CGPointMake(reflectionLayer.bounds.size.width?/?2,?reflectionLayer.bounds.size.height?*?0.5);

gradientLayer.colors?=?[NSArray?arrayWithObjects:

(id)[[UIColor?clearColor]?CGColor],

(id)[[UIColor?colorWithRed:1.0?green:1.0?blue:1.0?alpha:0.3]?CGColor],?nil];

gradientLayer.startPoint?=?CGPointMake(0.5,0.5);

gradientLayer.endPoint?=?CGPointMake(0.5,1.0);

reflectionLayer.mask?=?gradientLayer;

[self.superview?addSubview:reflectionImageView];

11、畫水印

// 畫水印

-?(void)?setImage:(UIImage?*)image?withWaterMark:(UIImage?*)mark?inRect:(CGRect)rect

{

if([[[UIDevice?currentDevice]?systemVersion]?floatValue]?>=?4.0)

{

UIGraphicsBeginImageContextWithOptions(self.frame.size,?NO,?0.0);

}

//原圖

[image?drawInRect:self.bounds];

//水印圖

[mark?drawInRect:rect];

UIImage?*newPic?=?UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

self.image?=?newPic;

}

12、獲取一個視頻的第一幀圖片

NSURL *url = [NSURL URLWithString:filepath];

AVURLAsset?*asset1?=?[[AVURLAsset?alloc]?initWithURL:url?options:nil];

AVAssetImageGenerator?*generate1?=?[[AVAssetImageGenerator?alloc]?initWithAsset:asset1];

generate1.appliesPreferredTrackTransform?=?YES;

NSError?*err?=?NULL;

CMTime?time?=?CMTimeMake(1,?2);

CGImageRef?oneRef?=?[generate1?copyCGImageAtTime:time?actualTime:NULL?error:&err];

UIImage?*one?=?[[UIImage?alloc]?initWithCGImage:oneRef];

returnone;

13、UIView背景顏色漸變

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];

[self.view?addSubview:view];

CAGradientLayer?*gradient?=?[CAGradientLayer?layer];

gradient.frame?=?view.bounds;

gradient.colors?=?[NSArray?arrayWithObjects:(id)[[UIColor?blackColor]?CGColor],?(id)[[UIColor?whiteColor]?CGColor],?nil];

[view.layer?insertSublayer:gradient?atIndex:0];

14、UIImage和base64互轉(zhuǎn)

// view分類方法

-?(NSString?*)encodeToBase64String:(UIImage?*)image?{

return[UIImagePNGRepresentation(image)?base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

}

-?(UIImage?*)decodeBase64ToImage:(NSString?*)strEncodeData?{

NSData?*data?=?[[NSData?alloc]initWithBase64EncodedString:strEncodeData?options:NSDataBase64DecodingIgnoreUnknownCharacters];

return[UIImage?imageWithData:data];

}

15、將一個image保存在相冊中

UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

或者

#import

[[PHPhotoLibrary?sharedPhotoLibrary]?performChanges:^{

PHAssetChangeRequest?*changeRequest?=?[PHAssetChangeRequest?creationRequestForAssetFromImage:image];

changeRequest.creationDate??????????=?[NSDate?date];

}?completionHandler:^(BOOL?success,?NSError?*error)?{

if(success)?{

NSLog(@"successfully?saved");

}

else{

NSLog(@"error?saving?to?photos:?%@",?error);

}

}];

16、修改cell.imageView的大小

UIImage *icon = [UIImage imageNamed:@""];

CGSize?itemSize?=?CGSizeMake(30,?30);

UIGraphicsBeginImageContextWithOptions(itemSize,?NO?,0.0);

CGRect?imageRect?=?CGRectMake(0.0,?0.0,?itemSize.width,?itemSize.height);

[icon?drawInRect:imageRect];

cell.imageView.image?=?UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

17、 ? ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容