| #pragma mark - 透明效果图片
 - (BOOL)hasAlpha {
 
 CGImageAlphaInfo alpha = CGImageGetAlphaInfo(self.CGImage);
 
 return (alpha == kCGImageAlphaFirst ||
 alpha == kCGImageAlphaLast ||
 alpha == kCGImageAlphaPremultipliedFirst ||
 alpha == kCGImageAlphaPremultipliedLast);
 }
 
 
 - (UIImage *)imageWithAlpha {
 if ([self hasAlpha]) {
 return self;
 }
 
 CGFloat scale = MAX(self.scale, 1.0f);
 CGImageRef imageRef = self.CGImage;
 size_t width = CGImageGetWidth(imageRef)*scale;
 size_t height = CGImageGetHeight(imageRef)*scale;
 
 
 CGContextRef offscreenContext =
 CGBitmapContextCreate(NULL,
 width,
 height,
 8,
 0,
 CGImageGetColorSpace(imageRef),
 kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst);
 
 
 
 CGContextDrawImage(offscreenContext, CGRectMake(0, 0, width, height), imageRef);
 CGImageRef imageRefWithAlpha = CGBitmapContextCreateImage(offscreenContext);
 UIImage *imageWithAlpha = [UIImage imageWithCGImage:imageRefWithAlpha scale:self.scale orientation:UIImageOrientationUp];
 
 
 CGContextRelease(offscreenContext);
 CGImageRelease(imageRefWithAlpha);
 
 return imageWithAlpha;
 }
 
 
 - (UIImage *)transparentBorderImage:(NSUInteger)borderSize {
 
 UIImage *image = [self imageWithAlpha];
 CGFloat scale = MAX(self.scale, 1.0f);
 NSUInteger scaledBorderSize = borderSize * scale;
 
 CGRect newRect = CGRectMake(0, 0, image.size.width * scale + scaledBorderSize * 2, image.size.height * scale + scaledBorderSize * 2);
 
 
 CGContextRef bitmap = CGBitmapContextCreate(NULL,
 newRect.size.width,
 newRect.size.height,
 CGImageGetBitsPerComponent(self.CGImage),
 0,
 CGImageGetColorSpace(self.CGImage),
 CGImageGetBitmapInfo(self.CGImage));
 
 
 CGRect imageLocation = CGRectMake(scaledBorderSize, scaledBorderSize, image.size.width*scale, image.size.height*scale);
 CGContextDrawImage(bitmap, imageLocation, self.CGImage);
 CGImageRef borderImageRef = CGBitmapContextCreateImage(bitmap);
 
 
 CGImageRef maskImageRef = [self newBorderMask:scaledBorderSize size:newRect.size];
 CGImageRef transparentBorderImageRef = CGImageCreateWithMask(borderImageRef, maskImageRef);
 UIImage *transparentBorderImage = [UIImage imageWithCGImage:transparentBorderImageRef scale:self.scale orientation:UIImageOrientationUp];
 
 
 CGContextRelease(bitmap);
 CGImageRelease(borderImageRef);
 CGImageRelease(maskImageRef);
 CGImageRelease(transparentBorderImageRef);
 
 return transparentBorderImage;
 }
 
 *  创建透明边框
 *
 *  @param borderSize 边框宽度
 *  @param size       尺寸
 *
 *  @return
 */
 - (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size {
 
 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
 
 
 CGContextRef maskContext = CGBitmapContextCreate(NULL,
 size.width,
 size.height,
 8,
 0,
 colorSpace,
 kCGBitmapByteOrderDefault | kCGImageAlphaNone);
 
 
 CGContextSetFillColorWithColor(maskContext, [UIColor blackColor].CGColor);
 CGContextFillRect(maskContext, CGRectMake(0, 0, size.width, size.height));
 
 
 CGContextSetFillColorWithColor(maskContext, [UIColor whiteColor].CGColor);
 CGContextFillRect(maskContext, CGRectMake(borderSize, borderSize, size.width - borderSize * 2, size.height - borderSize * 2));
 
 
 CGImageRef maskImageRef = CGBitmapContextCreateImage(maskContext);
 
 
 CGContextRelease(maskContext);
 CGColorSpaceRelease(colorSpace);
 
 return maskImageRef;
 }
 
 |