
合成效果
最近再做一個(gè)工具,主要的核心有圖片裁剪、合成、和保存還有一個(gè)毛玻璃效果的處理。下面簡(jiǎn)單介紹一下核心的幾個(gè)問(wèn)題,以便后續(xù)查看。
關(guān)于圖片的的合成:
- 合成圖片需要先有一塊“畫(huà)布”,通過(guò)合成最后生成一張 Image 圖片。
UIGraphicsBeginImageContextWithOptions(<#CGSize size#>, <#BOOL opaque#>, <#CGFloat scale#>)
- 解釋一下: 第一個(gè)參數(shù)表示所要?jiǎng)?chuàng)建的圖片的尺寸;第二個(gè)參數(shù)用來(lái)指定所生成圖片的背景是否為不透明,使用YES,背景圖片將變成黑色的,;第三個(gè)參數(shù)指定生成圖片的縮放因子,這個(gè)縮放因子與UIImage的scale屬性所指的含義是一致的。傳入0則表示讓圖片的縮放因子根據(jù)屏幕的分辨率而變化,所以我們得到的圖片不管是在單分辨率還是視網(wǎng)膜屏上看起來(lái)都會(huì)很好,也可以使用 [UIScreen mainScreen].scale 效果是一樣的。
- 如果是網(wǎng)絡(luò)請(qǐng)求的圖片資源建議另開(kāi)線程組(GCD 的 Group 組),然后進(jìn)行合成。
Code
- (void)saveImage:(UIButton *)button{
// 創(chuàng)建一個(gè)畫(huà)布設(shè)置畫(huà)布大小
UIGraphicsBeginImageContextWithOptions(CGSizeMake([UIScreen mainScreen].bounds.size.width,[UIScreen mainScreen].bounds.size.height), NO,[UIScreen mainScreen].scale);
下面的這個(gè)方法合成圖片后,圖片的質(zhì)量會(huì)降低也就是會(huì)被“壓縮”(需要設(shè)置縮放因子,如上所述)
//UIGraphicsBeginImageContext(CGSizeMake([UIScreen mainScreen].bounds.size.width,[UIScreen mainScreen].bounds.size.height));
// 繪制圖片
[self.backgroundImage.image drawInRect:self.backgroundImage.frame];
[self.cropImage.image drawInRect:self.cropImage.frame];
//獲取上下文中的圖片
self.imageGrap = UIGraphicsGetImageFromCurrentImageContext();
// 結(jié)束上下文
UIGraphicsEndImageContext();
// 圖片保存
UIImageWriteToSavedPhotosAlbum(self.imageGrap, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
}
// 保存協(xié)議方法
- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
NSString *message = @"保存";
if (!error) {
NSLog(@"保存成功");
}else{
message = [error description];
}
NSLog(@"message is %@",message);
}
關(guān)于圖片的毛玻璃
之前介紹過(guò) iOS 8.0 之后的毛玻璃效果,還有另外的解決方案為 2013 年 WWDC 上的一個(gè)類目文件可以用于處理圖片,達(dá)到毛玻璃效果。(WWDC 上發(fā)布的官方 sample 一個(gè) UIImage 的分類 UIImage+ImageEffects.h ,它不但可以制作毛玻璃效果圖片,而且可以調(diào)整模糊程度和顏色渲染。)
GitHub 下載: UIImage+ImageEffects
直接拷貝類目文件到工程文件即可。
這個(gè)類提供給了我們以下接口:不同的毛玻璃效果和自定義效果
- (UIImage *)applyLightEffect;
- (UIImage *)applyExtraLightEffect;
- (UIImage *)applyDarkEffect;
- (UIImage *)applyTintEffectWithColor:(UIColor *)tintColor;
- (UIImage *)applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage;
-
ps:使用圖片保存合成時(shí),處理過(guò)的圖片可以直接合成保存,如果使用系統(tǒng)的毛玻璃則無(wú)法生成帶毛玻璃的圖片,這個(gè)點(diǎn)需要注意