-(UIImage *)boxblurImageWithBlur:(CGFloat)blur {
NSData *imageData = UIImageJPEGRepresentation(self, 1); // convert to jpeg
UIImage* destImage = [UIImage imageWithData:imageData];
if (blur < 0.f || blur > 1.f) {
blur = 0.5f;
}
int boxSize = (int)(blur * 40);
boxSize = boxSize - (boxSize % 2) + 1;
CGImageRef img = destImage.CGImage;
vImage_Buffer inBuffer, outBuffer;
vImage_Error error;
void *pixelBuffer;
//create vImage_Buffer with data from CGImageRef
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);
//create vImage_Buffer for output
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);
// Create a third buffer for intermediate processing
void *pixelBuffer2 = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));
vImage_Buffer outBuffer2;
outBuffer2.data = pixelBuffer2;
outBuffer2.width = CGImageGetWidth(img);
outBuffer2.height = CGImageGetHeight(img);
outBuffer2.rowBytes = CGImageGetBytesPerRow(img);
//perform convolution
error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer2, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
if (error) {
NSLog(@"error from convolution %ld", error);
}
error = vImageBoxConvolve_ARGB8888(&outBuffer2, &inBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
if (error) {
NSLog(@"error from convolution %ld", error);
}
error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
if (error) {
NSLog(@"error from convolution %ld", error);
}
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(outBuffer.data,
outBuffer.width,
outBuffer.height,
8,
outBuffer.rowBytes,
colorSpace,
(CGBitmapInfo)kCGImageAlphaNoneSkipLast);
CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
UIImage *returnImage = [UIImage imageWithCGImage:imageRef];
//clean up
CGContextRelease(ctx);
CGColorSpaceRelease(colorSpace);
free(pixelBuffer);
free(pixelBuffer2);
CFRelease(inBitmapData);
CGImageRelease(imageRef);
return returnImage;
}
Image擴(kuò)展blur效果
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锚沸,“玉大人跋选,你說我怎么就攤上這事』冢” “怎么了前标?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長距潘。 經(jīng)常有香客問我炼列,道長,這世上最難降的妖魔是什么音比? 我笑而不...
- 正文 為了忘掉前任俭尖,我火速辦了婚禮,結(jié)果婚禮上洞翩,老公的妹妹穿的比我還像新娘稽犁。我一直安慰自己,他們只是感情好骚亿,可當(dāng)我...
- 文/花漫 我一把揭開白布已亥。 她就那樣靜靜地躺著,像睡著了一般来屠。 火紅的嫁衣襯著肌膚如雪虑椎。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼零抬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宽涌?” 一聲冷哼從身側(cè)響起平夜,我...
- 正文 年R本政府宣布,位于F島的核電站功茴,受9級特大地震影響庐冯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坎穿,卻給世界環(huán)境...
- 文/蒙蒙 一肄扎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赁酝,春花似錦、人聲如沸旭等。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽搔耕。三九已至隙袁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弃榨,已是汗流浹背菩收。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 環(huán)境: laravel-admin + laragon使用 intervention/image 時, 報錯 : ...
- 在Extension里使用Framework時報錯:image not found多半是在Extension里訪問...
- 寫在最前面的話: 最近有個項目需求:二維碼是動態(tài)拳亿,可隨時變更鏈接晴股,然后又要把二維碼放在指定的大圖的某個地方(中間,...
- mask-image:為元素添加圖片遮罩層,跟ps里面的遮罩層用法類似;適用于:所有元素; 在SVG中寂呛,它適用于除...