保存处理过后的图片,保证与屏幕截图同清晰度

本文分享了一位女性程序员参与优快云招聘女神活动的感受,并详细介绍了两种iOS平台上的截图方法:一种是保存指定大小和图层的UIView内容;另一种是进行全屏截图,并对截图进行旋转处理以适应不同iOS版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        昨天晚上,优快云上看到选招聘女神的活动,然后我把花花投给了一个不太漂亮的MS是UC优视的招聘女神,就是因为我最喜欢她的那句竞选标语,大意如此:“别人以为你的世界只有代码,可我知道你是在创造完美世界”。这也是我一个女生为什么会坚持奋斗在这一岗位上的原因之一。我也是相信我做的事终会有意义有价值,会让别人的生活变得更好。

       OK,进入关于截图的小结。


1、UIView保存指定大小,指定图层

 UIGraphicsBeginImageContextWithOptions(self.lableBackgroundView.theImage.bounds.size, NO, [[UIScreen mainScreen]scale]);

 [self.lableBackgroundView.theImage.laye renderInContext:UIGraphicsGetCurrentContext()];

 UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

 UIGraphicsEndImageContext();

 UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);


这段代码可以实现对self.lableBackgroundView.theImage.layer图层内容的保存

self.lableBackgroundView.theImage.bounds.size是要保存的图层的大小。


注意这句:

UIGraphicsBeginImageContextWithOptions(self.lableBackgroundView.theImage.bounds.sizeNO, [[UIScreen mainScreen]scale]);

//如果你的屏幕是retina,那[[UIScreen mainScreen]scale]设备分辨率为2


但是,经常会看到用这一句代替:UIGraphicsBeginImageContext(self.designView.bounds.size);

//这里默认[[UIScreen mainScreen]scale]为1,所以retina在这句代码下的截图,严重不清晰。


2、全屏截图

- (void )Screen

{

    //全屏截图

    CGImageRef UIGetScreenImage();

    CGImageRef img = UIGetScreenImage();

    UIImage* scImage=[UIImage imageWithCGImage:img];

    scImage =[scImage imageRotatedByDegrees:M_PI/2];

    UIImageWriteToSavedPhotosAlbum(scImage, nil, nil,nil);//存入相册

}

这段代码的效果就跟按HOME+头顶键截图的效果一样。

对全屏截图的处理

#define IsIOS7 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1]intValue]>=7)

- (void)screView:(CGRect )arect

{

    //区域截图

    UIImage *snapshot;

    CGImageRef UIGetScreenImage();

    CGImageRef cgScreen = UIGetScreenImage();

    if (cgScreen) {

        snapshot = [UIImage imageWithCGImage:cgScreen];

        CGImageRelease(cgScreen);

    }

    CGRect rect;

    if ([[UIScreen mainScreen]respondsToSelector:@selector(scale)]&& [[UIScreen mainScreen]scale]==2) {//获取高清size

        rect = CGRectMake(arect.origin.x *2, arect.origin.y*2 + (IsIOS7?0:20*2), arect.size.width*2, arect.size.height*2);

    }else

    {

        rect = CGRectMake(arect.origin.x, arect.origin.y+(IsIOS7?0:20), arect.size.width, arect.size.height);

    }

    UIImage *res = [UIImage imageWithCGImage:CGImageCreateWithImageInRect([snapshot CGImage], rect)];

    UIImageWriteToSavedPhotosAlbum(res, nil, nil, nil);

}


参考:http://blog.youkuaiyun.com/huangjingjin520/article/details/14523117





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值