iOS截图和保存图片

最近整理一下以往的项目,分享一段截图和保存图片的代码,刚开始的时候写这东西的时候,有些凌乱,现在看来还是比较简单的,算是记录一下。直接上代码了,有注释,可以直接套用。

//
//  ViewController.m
//  Test
//
//  Created by york on 16/3/30.
//  Copyright © 2016年 裴杨威. All rights reserved.
//

#define DEVICE_WIDTH [UIScreen mainScreen].bounds.size.width
#define DEVICE_HEIGHT [UIScreen mainScreen].bounds.size.height
#import "ViewController.h"

@interface ViewController ()
{
    UIImageView *topImageView;
    UIImageView *bottomImageView;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor grayColor];
    
    topImageView = [[UIImageView alloc] initWithFrame:CGRectMake((DEVICE_WIDTH-252)/2, 20, 252, 220)];
    topImageView.image = [UIImage imageNamed:@"1.jpg"];
    [self.view addSubview:topImageView];
    
    bottomImageView = [[UIImageView alloc] initWithFrame:CGRectMake((DEVICE_WIDTH-140)/2, CGRectGetMaxY(topImageView.frame), 140, 220)];
    bottomImageView.image = [UIImage imageNamed:@"2.jpg"];
    [self.view addSubview:bottomImageView];
    
    UIButton *saveTopImageBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    saveTopImageBtn.frame = CGRectMake(10, CGRectGetMaxY(bottomImageView.frame)+20, (DEVICE_WIDTH-30)/2, 30);
    [saveTopImageBtn setTitle:@"截图上图" forState:0];
    saveTopImageBtn.tag = 100;
    [saveTopImageBtn addTarget:self action:@selector(saveBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:saveTopImageBtn];
    
    UIButton *saveBottomImageBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    saveBottomImageBtn.frame = CGRectMake(CGRectGetMaxX(saveTopImageBtn.frame)+10, CGRectGetMaxY(bottomImageView.frame)+20, (DEVICE_WIDTH-30)/2, 30);
    [saveBottomImageBtn setTitle:@"截图下图" forState:0];
    saveBottomImageBtn.tag = 101;
    [saveBottomImageBtn addTarget:self action:@selector(saveBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:saveBottomImageBtn];
    
    UIButton *saveAllImageBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    saveAllImageBtn.frame = CGRectMake(10, CGRectGetMaxY(saveTopImageBtn.frame)+20, (DEVICE_WIDTH-30)/2, 30);
    [saveAllImageBtn setTitle:@"截图整屏" forState:0];
    saveAllImageBtn.tag = 102;
    [saveAllImageBtn addTarget:self action:@selector(saveBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:saveAllImageBtn];
    
    UIButton *SaveNetImageBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    SaveNetImageBtn.frame = CGRectMake(CGRectGetMaxX(saveTopImageBtn.frame)+10, CGRectGetMaxY(saveBottomImageBtn.frame)+20, (DEVICE_WIDTH-30)/2, 30);
    [SaveNetImageBtn setTitle:@"保存网络图片" forState:0];
    SaveNetImageBtn.tag = 103;
    [SaveNetImageBtn addTarget:self action:@selector(saveBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:SaveNetImageBtn];
    
}

- (BOOL)isOpenAlbum//判断是否能打开相册
{
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypePhotoLibrary])
    {
        return YES;
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"无法打开相册" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alert show];
        return NO;
    }
}

#pragma mark -
#pragma mark --保存通过url获取的图片--
- (void)saveNetImage
{
    NSData *dateImg = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://d.hiphotos.baidu.com/image/h%3D200/sign=8663264274f082023292963f7bfbfb8a/f3d3572c11dfa9eca13b947665d0f703918fc1be.jpg"]];
    UIImage *image = [UIImage imageWithData:dateImg];
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
}

#pragma mark -
#pragma mark --截图--
- (UIImage *)getRealImage:(UIView *)view
{
    /*
    UIGraphicsBeginImageContextWithOptions(<#CGSize size#>, <#BOOL opaque#>, <#CGFloat scale#>)
     size ----> 新创建的位图上下文的大小
     opaque ----> 透明度开关
     scale ----> 缩放因子 0指的是系统会自动设置正确的比例
     */
    UIGraphicsBeginImageContextWithOptions(view.bounds.size,YES,0);//创建一个基于位图的上下文
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

#pragma mark -
#pragma mark --系统保存图片的方法--
- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    if (!error) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"保存成功" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alert show];
    }else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"保存失败" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alert show];
    }
}

#pragma mark -
#pragma mark --按钮点击事件--
- (void)saveBtnClick:(UIButton *)sender
{
    switch (sender.tag) {
        case 100:
        {
            if ([self isOpenAlbum]) {
                UIImageWriteToSavedPhotosAlbum([self getRealImage:topImageView], self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
            }
        }
            break;
        case 101:
        {
            if ([self isOpenAlbum]) {
                UIImageWriteToSavedPhotosAlbum([self getRealImage:bottomImageView], self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
            }
        }
            break;
        case 102:
        {
            if ([self isOpenAlbum]) {
                UIImageWriteToSavedPhotosAlbum([self getRealImage:self.view], self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
            }
        }
            break;
        case 103:
        {
            if ([self isOpenAlbum]) {
                [self saveNetImage];
            }
        }
            break;
        default:
            break;
    }
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end




  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值