关于图片的等比缩放,从相机和照片选取头像,显示圆形头像

话不多说,应该都是大家经常使用的功能,就总结了下,分享给朋友们,希望多提宝贵意见

1.通过相机和从相片中选择设置头像

//MARK:通过相机和从相片中选择设置头像

    //弹出提示框,选择获取头像的方式

    //从相册获取图片

- (void)takePictureClick:(UIButton *)sender

    {

        //    /*注:使用,需要实现以下协议:UIImagePickerControllerDelegate,

        //     UINavigationControllerDelegate

        //     */

        //    UIImagePickerController *picker = [[UIImagePickerController alloc]init];

        //    //设置图片源(相簿)

        //    picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

        //    //设置代理

        //    picker.delegate = self;

        //    //设置可以编辑

        //    picker.allowsEditing = YES;

        //    //打开拾取器界面

        //    [self presentViewController:picker animated:YES completion:nil];

        UIActionSheet* actionSheet = [[UIActionSheetalloc]

                                      initWithTitle:@"请选择文件来源"

                                      delegate:self

                                      cancelButtonTitle:@"取消"

                                      destructiveButtonTitle:nil

                                      otherButtonTitles:@"照相机",@"摄像机",@"本地相簿",@"本地视频",nil];

        [actionSheet showInView:self.view];

        

    }


#pragma 点击按钮选择选取图片的方法

    - (void)actionclickedButtonAtIndex:(NSInteger)buttonIndex

    {

        NSLog(@"buttonIndex = [%ld]",(long)buttonIndex);

        switch (buttonIndex) {

            case0://照相机

            {

                UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc] init];

                imagePicker.delegate =self;

                imagePicker.allowsEditing =YES;

                imagePicker.sourceType =UIImagePickerControllerSourceTypeCamera;

                //            [self presentModalViewController:imagePicker animated:YES];

                [selfpresentViewController:imagePickeranimated:YEScompletion:nil];

            }

                break;

            case1://摄像机

            {

                UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc] init];

                imagePicker.delegate =self;

                imagePicker.allowsEditing =YES;

                imagePicker.sourceType =UIImagePickerControllerSourceTypeCamera;

                imagePicker.videoQuality =UIImagePickerControllerQualityTypeLow;

                //            [self presentModalViewController:imagePicker animated:YES];

                [selfpresentViewController:imagePickeranimated:YEScompletion:nil];

            }

                break;

            case2://本地相簿

            {

                UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc] init];

                imagePicker.delegate =self;

                imagePicker.allowsEditing =YES;

                imagePicker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;

                //            [self presentModalViewController:imagePicker animated:YES];

                [selfpresentViewController:imagePickeranimated:YEScompletion:nil];

            }

                break;

            case3://本地视频

            {

                UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc] init];

                imagePicker.delegate =self;

                imagePicker.allowsEditing =YES;

                imagePicker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;

                //            [self presentModalViewController:imagePicker animated:YES];

                [selfpresentViewController:imagePickeranimated:YEScompletion:nil];

            }

                break;

            default:

                break;

        }

    }

#pragma mark -

#pragma UIImagePickerController Delegate方法

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

    {

        if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)kTTypeImage]) {

            UIImage *img = [infoobjectForKey:UIImagePickerControllerEditedImage];

            [selfperformSelector:@selector(saveImage:) withObject:img afterDelay:0.5];

        }

        elseif ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)kUTTypeMovie]) {

            NSString *videoPath = [[infoobjectForKey:UIImagePickerControllerMediaURL]path];

            self.fileData = [NSData dataWithContentsOfFile:videoPath];

        }

        //    [picker dismissModalViewControllerAnimated:YES];

        [picker dismissViewControllerAnimated:YEScompletion:nil];

    }

    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker

    {

        //    [picker dismissModalViewControllerAnimated:YES];

        [picker dismissViewControllerAnimated:YEScompletion:nil];

    }

    - (void)saveImage:(UIImage *)image {

        //    NSLog(@"保存头像!");

        //    [userPhotoButton setImage:image forState:UIControlStateNormal];

        BOOL success;

        NSFileManager *fileManager = [NSFileManagerdefaultManager];

        NSError *error;

        

        NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

        NSString *documentsDirectory = [pathsobjectAtIndex:0];

        NSString *imageFilePath = [documentsDirectorystringByAppendingPathComponent:@"selfPhoto.jpg"];

        NSLog(@"imageFile->>%@",imageFilePath);

        success = [fileManager fileExistsAtPath:imageFilePath];

        if(success) {

            success = [fileManager removeItemAtPath:imageFilePatherror:&error];

        }

        //    UIImage *smallImage=[self scaleFromImage:image toSize:CGSizeMake(80.0f, 80.0f)];//将图片尺寸改为80*80

        UIImage *smallImage = [selfthumbnailWithImageWithoutScale:imagesize:CGSizeMake(93,93)];

        [UIImageJPEGRepresentation(smallImage,1.0f) writeToFile:imageFilePathatomically:YES];//写入文件

        UIImage *selfPhoto = [UIImageimageWithContentsOfFile:imageFilePath];//读取图片文件

        //    [userPhotoButton setImage:selfPhoto forState:UIControlStateNormal];

        self.imv.image = selfPhoto;

    }

    // 改变图像的尺寸,方便上传服务器

    - (UIImage *) scaleFromImage: (UIImage *) image toSize: (CGSize) size

    {

        UIGraphicsBeginImageContext(size);

        [image drawInRect:CGRectMake(0,0, size.width, size.height)];

        UIImage *newImage =UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

        return newImage;

    }

//MARK: 2.保持原始图片的长宽比,生成需要尺寸的图片

    //2.保持原来的长宽比,生成一个缩略图

    - (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize

    {

        UIImage *newimage;

        if (nil == image) {

            newimage = nil;

        }

        else{

            CGSize oldsize = image.size;

            CGRect rect;

            if (asize.width/asize.height > oldsize.width/oldsize.height) {

                rect.size.width = asize.height*oldsize.width/oldsize.height;

                rect.size.height = asize.height;

                rect.origin.x = (asize.width - rect.size.width)/2;

                rect.origin.y =0;

            }

            else{

                rect.size.width = asize.width;

                rect.size.height = asize.width*oldsize.height/oldsize.width;

                rect.origin.x =0;

                rect.origin.y = (asize.height - rect.size.height)/2;

            }

            UIGraphicsBeginImageContext(asize);

            CGContextRef context =UIGraphicsGetCurrentContext();

            CGContextSetFillColorWithColor(context, [[UIColorclearColor] CGColor]);

            UIRectFill(CGRectMake(0,0, asize.width, asize.height));//clear background

            [image drawInRect:rect];

            newimage = UIGraphicsGetImageFromCurrentImageContext();

            UIGraphicsEndImageContext();

        }

        return newimage;

    }



//MARK:3.显示圆形头像

- (void)showRound{

    NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

    NSString *documentsDirectory = [pathsobjectAtIndex:0];

    NSString *imageFilePath = [documentsDirectorystringByAppendingPathComponent:@"selfPhoto.jpg"];

    NSLog(@"imageFile->>%@",imageFilePath);

    UIImage *selfPhoto = [UIImageimageWithContentsOfFile:imageFilePath];

    self.imv.image = selfPhoto;

    [self.imv.layersetCornerRadius:CGRectGetHeight([self.imvbounds]) / 2]; //修改半径,实现头像的圆形化

    self.imv.layer.masksToBounds = YES;

    

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在uniapp中实现图片的等比缩放,可以使用canvas来进行处理。具体步骤如下: 1. 获取图片信息 使用uniapp提供的uni.getImageInfo()方法获取图片的信息,包括宽度和高度等。 2. 计算缩放比例 根据需要缩放的大小和图片的实际大小,计算出缩放比例。 3. 创建canvas 使用uni.createCanvasContext()方法创建canvas上下文。 4. 绘制图片 使用canvas上下文提供的drawImage()方法将图片绘制到canvas中。 5. 设置canvas尺寸 根据缩放比例和图片实际大小,设置canvas的尺寸。 6. 绘制缩放后的图片 使用canvas上下文提供的drawImage()方法将缩放后的图片绘制到canvas中。 7. 导出图片 使用canvas.toTempFilePath()方法将canvas导出为图片。 下面是一个示例代码,用于实现图片的等比缩放: ```javascript uni.getImageInfo({ src: '图片路径', success: function (res) { var ratio = 2; // 缩放比例 var canvasWidth = res.width / ratio; // 计算缩放后的宽度 var canvasHeight = res.height / ratio; // 计算缩放后的高度 var ctx = uni.createCanvasContext('canvasId'); // 创建canvas上下文 ctx.drawImage('图片路径', 0, 0, canvasWidth, canvasHeight); // 绘制图片 ctx.draw(false, function () { uni.canvasToTempFilePath({ // 导出图片 canvasId: 'canvasId', success: function (res) { console.log(res.tempFilePath); } }); }); } }); ``` 需要注意的是,上述代码中的canvasId需要在页面中定义一个canvas元素,并设置其id为canvasId。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值