相册的选择-单张/多张

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Yuanti SC" }

一、相册的选择-单张(系统-打开相册和打开相机??)

/*
 一、从相册里面选择图片到App中
 1.选择单张图片
 1> UIImagePickerController (自带选择界面)
 2> AssetsLibrary框架 (选择界面需要开发者自己搭建)
 3> Photos框架 (选择界面需要开发者自己搭建)

 2.选择多张图片(图片数量 >= 2)
 1> AssetsLibrary框架 (选择界面需要开发者自己搭建)
 2> Photos框架 (选择界面需要开发者自己搭建)

 二、利用照相机拍一张照片到App
 1> UIImagePickerController (自带选择界面)
 2> AVCapture****,比如AVCaptureSeession
 */

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>

@interface ViewController () <UINavigationControllerDelegate, UIImagePickerControllerDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

}

- (IBAction)selectPhoto {
    // UIAlertControllerStyleAlert : 相当于弹出一个UIAlertView
    // UIAlertControllerStyleActionSheet : 相当于弹出一个UIActionSheet

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"请选择方式" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
    // 按钮
    [alert addAction:[UIAlertAction actionWithTitle:@"相册" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [self openAlbum];
    }]];

    [alert addAction:[UIAlertAction actionWithTitle:@"照相机" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [self openCamera];
    }]];

    [self presentViewController:alert animated:YES completion:nil];
}

/**
 *  打开相册
 */
- (void)openAlbum
{
    // UIImagePickerControllerSourceTypeSavedPhotosAlbum : 从Moments相册中选一张图片
    // UIImagePickerControllerSourceTypePhotoLibrary : 从所有相册中选一张图片
    // UIImagePickerControllerSourceTypeCamera : 利用照相机中拍一张图片
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    picker.delegate = self;
    [self presentViewController:picker animated:YES completion:nil];
}

/**
 *  打开照相机
 */
- (void)openCamera
{
    //判断是否能打开相机
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) return;
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    picker.delegate = self;
    [self presentViewController:picker animated:YES completion:nil];
}

#pragma mark - <UIImagePickerControllerDelegate>
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
    // 关闭图片选择界面
    [picker dismissViewControllerAnimated:YES completion:nil];

    // 显示选择的图片
    self.imageView.image = info[UIImagePickerControllerOriginalImage];
}
@end

二、相册的选择-单张/多张(第三方CTAssetsPickerController)

//platform :ios, ‘8.0‘
//pod ‘CTAssetsPickerController‘,  ‘~> 3.3.0‘
/*
 从相册中选择多张图片(图片数量 >= 2)
 1> AssetsLibrary框架 (选择界面需要开发者自己搭建)
 2> Photos框架 (选择界面需要开发者自己搭建)
 */

#import "ViewController.h"
#import <CTAssetsPickerController.h>

@interface ViewController () <CTAssetsPickerControllerDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // photo  image picker asset
}

- (IBAction)selectPhoto {
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status){
        if (status != PHAuthorizationStatusAuthorized) return;

        dispatch_async(dispatch_get_main_queue(), ^{
            // 弹出图片选择界面
            CTAssetsPickerController *picker = [[CTAssetsPickerController alloc] init];
            // 隐藏空相册
            picker.showsEmptyAlbums = NO;
            // 显示图片索引
            picker.showsSelectionIndex = YES;
            picker.assetCollectionSubtypes = @[
                                               @(PHAssetCollectionSubtypeSmartAlbumUserLibrary),
                                               @(PHAssetCollectionSubtypeAlbumRegular)
                                               ];
            picker.delegate = self;

            if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { // 如果当前运行的设备是平板电脑
                picker.modalPresentationStyle = UIModalPresentationFormSheet;
            }

            [self presentViewController:picker animated:YES completion:nil];
        });
    }];
}

#pragma mark - <CTAssetsPickerControllerDelegate>
- (BOOL)assetsPickerController:(CTAssetsPickerController *)picker shouldSelectAsset:(PHAsset *)asset
{
    NSInteger max = 9;

    if (picker.selectedAssets.count < max) return YES;

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"注意"
                                        message:[NSString stringWithFormat:@"最多选择%zd张图片", max]
                                 preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:nil]];
    // 这里一定要用picker,不能使用self(因为当前显示在上面的控制器是picker,不是self)
    [picker presentViewController:alert animated:YES completion:nil];

    return NO;
}

/**
 *  选择完毕的时候调用
 */
- (void)assetsPickerController:(CTAssetsPickerController *)picker didFinishPickingAssets:(NSArray *)assets
{
    // 关闭图片选择界面
    [picker dismissViewControllerAnimated:YES completion:nil];

    // 选择图片时的配置项
    PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
    options.resizeMode   = PHImageRequestOptionsResizeModeExact;
    options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;

    // 显示图片
    for (NSInteger i = 0; i < assets.count; i++) {
        PHAsset *asset = assets[i];
        CGSize size = CGSizeMake(asset.pixelWidth / [UIScreen mainScreen].scale, asset.pixelHeight / [UIScreen mainScreen].scale);

        // 请求图片
        [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
            // 添加图片控件
            UIImageView *imageView = [[UIImageView alloc] init];
            imageView.image = result;
            [self.view addSubview:imageView];

            imageView.frame = CGRectMake((i % 3) * (100 + 10), (i / 3) * (100 + 10), 100, 100);
        }];
    }
}
@end

三、本地化

给项目添加语言支持-选择简体中文

国际化-本地化

原文地址:https://www.cnblogs.com/StevenHuSir/p/10129754.html

时间: 2024-08-30 00:00:01

相册的选择-单张/多张的相关文章

android 从相册中选择图片并判断图片是否旋转

今天在做图片合成时,首先从相册中选择图片,然后判断该图片是否旋转了,今天就讲下图片是否旋转,直接上代码 /** * 读取照片exif信息中的旋转角度 * * @param path * 照片路径 * @return角度 获取从相册中选中图片的角度 */ public static int readPictureDegree(String path) { if (TextUtils.isEmpty(path)) { return 0; } int degree = 0; try { ExifInt

swift -从相册中选择照片并上传

选择本地图片并上传是应用开发中一个比较常见的功能.     原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1174.html 我们使用 UIImagePickerController 可以很方便的从系统"照片"中选择图片,但我们会发现选择完毕后,通过图片的 info[UIImagePickerControllerReferenceURL] 得到的是一个引用路径,格式如下: 1 assets-

table中tr使用toggle不好,选择换一张方式

好几次遇到的问题,都是table中tr后面有一部分内容要显示,也是用tr装的,但是需要点击该行,后面那个tr才显示出来.不过最好不要用toggle去写,因为着实效果不佳.故而建议换一种方式,也许最简单的js才是最有效的. <html xmlns="http://www.w3.org/1999/xhtml" > <head> <meta http-equiv="Content-Type" content="text/html;

Android向系统相册中插入图片,相册中会出现两张 一样的图片(只是图片大小不一致)

向系统相册中插入图片调用此方法时,相册中会出现两张一样的图片 MediaStore.Images.Media.insertImage 一张图片是原图一张图片是缩略图.表现形式为:android4.4.4系统中插入的缩略图和原图在sdcard根目录下的DCIM文件夹这种,Android5.0以上的机型插入的缩略图在sdcard根目录下的Pictures文件夹下,原图存放在DCIM文件夹下. 导致这个问题的原因查看代码后知道在插入原图的同时系统自动生成了一个缩略图并保存再相应的文件目录下,代码如下.

Swift - 从相册中选择视频(过滤掉照片,使用UIImagePickerController)

(本文代码已升级至Swift4) 有时我们需要从系统相册中选择视频录像,来进行编辑或者上传操作,这时使用 UIImagePickerController 就可以实现. 默认情况下,UIImagePickerController 打开系统"照片"后允许用户选择所有的媒体文件(不管是照片还是录像),我们可以通过 mediaTypes 属性设置.让其只显示视频录像. 1,样例说明 (1)下面样例点击"选择视频"按钮后,会自动打开相册选择视频. (2)由于设置了 media

从相册中选择图片进行压缩并用ImageView展示出来

从手机中选择照片这是几乎所有应用的功能之一,主要考虑到一点的就是如果图片太大了,可能会OOM,简单的处理就是对图片进行压缩! <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" and

Android 打开相册,选择一张图片并返回

一  打开相册 private static final int ALBUM_OK = 0; Intent albumIntent = new Intent(Intent.ACTION_PICK, null); albumIntent.setDataAndType( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(albumIntent, ALBUM_OK); 二  显示图

关于解决 从相册中选择照片后无法剪切图片以及无法加载图片的问题

程序分析: 主要分两个部分 (1)先拍照,然后剪切,最后显示出来.    (2)从相册中选择一张照片进行剪切然后显示出来 代码参照<第一行代码>,书中的代码运行时(2)出现了问题,无法剪切图片且无法加载图片 MainActivity.java代码如下: 1 package com.example.lynn.choosepictest; 2 3 import android.content.Intent; 4 import android.graphics.Bitmap; 5 import an

iOS相册、相机(单张图片选取)

UIImagePickerController (1)代理 <UINavigationControllerDelegate, UIImagePickerControllerDelegate>delegate (2)几个基本属性设置 sourceType //设置资源获取类型 allowsEditing //是否允许图片编辑 (3)几个判断类方法 /**是否可以获取该类型资源*/ + (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSour