?iOS中關于圖片背景模糊

? ? ? ?第一是高斯模糊,iOS5.0之后出現(xiàn)了CoreImage的API镜沽,Core Image的API被放在CoreImage.framework庫中, 在iOS和OS X平臺上,Core Image都提供了大量的濾鏡(Filter)状婶,在OS X上有120多種Filter提前,而在iOS上也有90多。

? ? ? ?方法如下:

+ (UIImage *)coreTeachImage:(UIImage *)image withCoreNumber:(CGFloat)coreNumber {

CIContext *context = [CIContext contextWithOptions:nil];

CIImage? *inputImage=[CIImage imageWithCGImage:image.CGImage];

//設置filter

CGImageRef outImage;

if (NSFoundationVersionNumber >= 1140.11) {

CIImage *result = [inputImage imageByClampingToExtent];

result = [result imageByApplyingFilter:@"CIGaussianBlur" withInputParameters:@{

kCIInputRadiusKey : @(coreNumber)

}];

result = [result imageByCroppingToRect:inputImage.extent];

outImage=[context createCGImage:result fromRect:[result extent]];

}

UIImage *blurImage=[UIImage imageWithCGImage:outImage];

CGImageRelease(outImage);

return blurImage;

}

效果如下(coreNumber設置為5)

感覺還不錯

但是在實際項目開發(fā)里這種方法好像遇到了問題字逗。

第二種方法是用系統(tǒng)Accelerate.Framework,Accelerate主要是用來做數字信號處理宅广、圖像處理相關的向量葫掉、矩陣運算的庫。圖像可以認為是由向量或者矩陣數據構成的跟狱,Accelerate里既然提供了高效的數學運算API俭厚,自然就能方便我們對圖像做各種各樣的處理 ,模糊算法使用的是vImageBoxConvolve_ARGB8888這個函數驶臊。具體代碼如下:

+ (UIImage *)vagueImage:(UIImage *)image withVagueNumber:(CGFloat)number {

if (number < 0.f || number > 1.f) {

number = 0.5f;

}

int boxSize = (int)(number * 40);

boxSize = boxSize - (boxSize % 2) + 1;

CGImageRef img = image.CGImage;

vImage_Buffer inBuffer, outBuffer;

vImage_Error error;

void *pixelBuffer;

// 從CGImage中獲取數據

CGDataProviderRef inProvider = CGImageGetDataProvider(img);

CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);

// 設置從CGImage獲取對象的屬性

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);

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,

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;

}

效果圖:(number設置0.4)

效果有挪挤,但是明顯覺得有重影!

最后就是用的第三方:其中一個類UIImageView+LBBlurredImage关翎,項目開發(fā)中發(fā)現(xiàn)對大圖片加載會有些慢

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末扛门,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纵寝,更是在濱河造成了極大的恐慌论寨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爽茴,死亡現(xiàn)場離奇詭異葬凳,居然都是意外死亡,警方通過查閱死者的電腦和手機室奏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門火焰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窍奋,你說我怎么就攤上這事荐健〗闯” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵江场,是天一觀的道長纺酸。 經常有香客問我,道長址否,這世上最難降的妖魔是什么餐蔬? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮佑附,結果婚禮上樊诺,老公的妹妹穿的比我還像新娘。我一直安慰自己音同,他們只是感情好词爬,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著权均,像睡著了一般顿膨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叽赊,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天恋沃,我揣著相機與錄音,去河邊找鬼必指。 笑死囊咏,一個胖子當著我的面吹牛,可吹牛的內容都是我干的塔橡。 我是一名探鬼主播梅割,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谱邪!你這毒婦竟也來了炮捧?” 一聲冷哼從身側響起庶诡,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惦银,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后末誓,有當地人在樹林里發(fā)現(xiàn)了一具尸體扯俱,經...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年喇澡,在試婚紗的時候發(fā)現(xiàn)自己被綠了迅栅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡晴玖,死狀恐怖读存,靈堂內的尸體忽然破棺而出为流,到底是詐尸還是另有隱情,我是刑警寧澤让簿,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布敬察,位于F島的核電站,受9級特大地震影響尔当,放射性物質發(fā)生泄漏莲祸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一椭迎、第九天 我趴在偏房一處隱蔽的房頂上張望锐帜。 院中可真熱鬧,春花似錦畜号、人聲如沸缴阎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽药蜻。三九已至,卻和暖如春替饿,著一層夾襖步出監(jiān)牢的瞬間语泽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工视卢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踱卵,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓据过,卻偏偏與公主長得像惋砂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绳锅,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容