最近再做一個(gè)工具侣灶,主要的核心有圖片裁剪、合成缕碎、和保存還有一個(gè)毛玻璃效果的處理褥影。下面簡單介紹一下核心的幾個(gè)問題,以便后續(xù)查看咏雌。
關(guān)于圖片的的合成:
- 合成圖片需要先有一塊“畫布”凡怎,通過合成最后生成一張 Image 圖片。
UIGraphicsBeginImageContextWithOptions(<#CGSize size#>, <#BOOL opaque#>, <#CGFloat scale#>)
- 解釋一下: 第一個(gè)參數(shù)表示所要?jiǎng)?chuàng)建的圖片的尺寸赊抖;第二個(gè)參數(shù)用來指定所生成圖片的背景是否為不透明统倒,使用YES,背景圖片將變成黑色的熏迹,檐薯;第三個(gè)參數(shù)指定生成圖片的縮放因子,這個(gè)縮放因子與UIImage的scale屬性所指的含義是一致的注暗。傳入0則表示讓圖片的縮放因子根據(jù)屏幕的分辨率而變化坛缕,所以我們得到的圖片不管是在單分辨率還是視網(wǎng)膜屏上看起來都會(huì)很好,也可以使用 [UIScreen mainScreen].scale 效果是一樣的。
- 如果是網(wǎng)絡(luò)請求的圖片資源建議另開線程組(GCD 的 Group 組)捆昏,然后進(jìn)行合成赚楚。
Code
- (void)saveImage:(UIButton *)button{
// 創(chuàng)建一個(gè)畫布設(shè)置畫布大小
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)于圖片的毛玻璃
之前介紹過 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í)俭嘁,處理過的圖片可以直接合成保存,如果使用系統(tǒng)的毛玻璃則無法生成帶毛玻璃的圖片服猪,這個(gè)點(diǎn)需要注意