Gaussian Blur
이미지를 생성하는 더 빠른 방법을 찾고 있는데,이 blog은 대부분의 이미지에서 잘 작동합니다.vImage를 사용하는 UIImage 가우시안 블러
그러나 이미지가 투명 backgroudcolor이있는 경우는 Blured 등 이미지
아래의 블로그에서 복사 된 코드에 좋지 : 나는 다른 방법을 시도
-(UIImage *)vImageBlurWithNumber:(CGFloat)blur
{
if (blur < 0.f || blur > 1.f) {
blur = 0.5f;
}
int boxSize = (int)(blur * 100);
boxSize = boxSize - (boxSize % 2) + 1;
CGImageRef img = self.CGImage;
vImage_Buffer inBuffer, outBuffer;
vImage_Error error;
void *pixelBuffer;
CGDataProviderRef inProvider = CGImageGetDataProvider(img);
CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);
inBuffer.width = CGImageGetWidth(img);
inBuffer.height = CGImageGetHeight(img);
inBuffer.rowBytes = CGImageGetBytesPerRow(img);
inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);
pixelBuffer = malloc(CGImageGetBytesPerRow(img) *
CGImageGetHeight(img));
if(pixelBuffer == NULL)
NSLog(@"No pixelbuffer");
outBuffer.data = pixelBuffer;
outBuffer.width = CGImageGetWidth(img);
outBuffer.height = CGImageGetHeight(img);
outBuffer.rowBytes = CGImageGetBytesPerRow(img);
// may be i should modify last 2 parameter below ,how ?
error = vImageBoxConvolve_ARGB8888(&inBuffer,
&outBuffer,
NULL,
0,
0,
boxSize,
boxSize,
NULL,
kvImageEdgeExtend); // kvImageBackgroundColorFill ?
if (error) {
NSLog(@"error from convolution %ld", error);
}
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(
outBuffer.data,
outBuffer.width,
outBuffer.height,
8,
outBuffer.rowBytes,
colorSpace,
kCGImageAlphaNoneSkipLast);
CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
UIImage *returnImage = [UIImage imageWithCGImage:imageRef];
//clean up
// CGContextRelease(ctx);
CGColorSpaceRelease(colorSpace);
free(pixelBuffer);
CFRelease(inBitmapData);
CGColorSpaceRelease(colorSpace);
CGImageRelease(imageRef);
return returnImage;
}
이 Gaussian Blur
효과를 만들기 위해,
Apple WWDC 2013 UIImage-ImageEffects
카테고리를 사용하면
이지만이 카테고리의 효과는 Gaussian Blur
대신 Frosted glass
입니다.
Blur in Core Image
잘 작동하지만 vImage 방식보다 느립니다.
GPUImage
또한 vimage보다 느립니다.
위의 vImage 코드를 수정하는 데 도움을주십시오. 많은 노력을했지만 데모 코드를 게시하십시오 here;
:
마지막으로 알파 채널을 제거하기 위해 .png로 변환합니다. UIImage * inputImage = [UIImage imageWithData : UIImageJPEGRepresentation (img, 1.0)]; ' –
흐림 효과가있는 투명 이미지는 여기 http : // i. stack.imgur.com/o1iVy.png, 실례합니다. 이미지 게시에 충분한 평판이 없습니다. –
결과가 다음과 같을 것으로 기대합니다. http://i.stack.imgur.com/RZJ6V.png –