iOS实现图片保存与搜索功能

本文实现Photos.framework的常见功能,包括:创建自定义相册、保存图片到自定义相册、搜索所有相册的图片,具体内容如下
1、保存图片到相册

/**
 * 保存图片到相册
 */
- (IBAction)saveImage {
  PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
  if (status == PHAuthorizationStatusDenied) {
    NSLog(@"请到【设置-隐私-照片】打开访问开关");
  } else if (status == PHAuthorizationStatusRestricted) {
    NSLog(@"无法访问相册");
  } else {
    // 保存相片的标识
    __block NSString *assetId = nil;

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
      // 保存相片到相机胶卷,并返回标识
      assetId = [PHAssetCreationRequest creationRequestForAssetFromImage:[UIImage imageNamed:@"logo"]].placeholderForCreatedAsset.localIdentifier;
    } completionHandler:^(BOOL success, NSError * _Nullable error) {
      if (!success) {
        NSLog(@"保存失败:%@", error);
        return;
      }

      // 根据标识获得相片对象
      PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetId] options:nil].lastObject;

      // 拿到自定义的相册对象
      PHAssetCollection *collection = [self collection];
      if (collection == nil) return;

      // 保存相片到自定义相册中
      [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        [[PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection] addAssets:@[asset]];
      } completionHandler:^(BOOL success, NSError * _Nullable error) {
        if (success) {
          NSLog(@"保存成功");
        } else {
          NSLog(@"保存失败:%@", error);
        }
      }];
    }];
  }
}

2、搜索所有相片

/**
 * 查询所有的图片
 */
- (IBAction)searchAllImages {

  // 遍历所有的自定义相册
  PHFetchResult<PHAssetCollection *> *collectionResult0 = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
  for (PHAssetCollection *collection in collectionResult0) {
    [self searchAllImagesInCollection:collection];
  }

  // 获得相机胶卷的图片
  PHFetchResult<PHAssetCollection *> *collectionResult1 = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
  for (PHAssetCollection *collection in collectionResult1) {
    if (![collection.localizedTitle isEqualToString:@"Camera Roll"]) continue;
    [self searchAllImagesInCollection:collection];
    break;
  }
}

/**
 * 查询某个相册里面的所有图片
 */
- (void)searchAllImagesInCollection:(PHAssetCollection *)collection
{
  // 采取同步获取图片(只获得一次图片)
  PHImageRequestOptions *imageOptions = [[PHImageRequestOptions alloc] init];
  imageOptions.synchronous = YES;

  NSLog(@"相册名字:%@", collection.localizedTitle);

  // 遍历这个相册中的所有图片
  PHFetchResult<PHAsset *> *assetResult = [PHAsset fetchAssetsInAssetCollection:collection options:nil];
  for (PHAsset *asset in assetResult) {
    // 过滤非图片
    if (asset.mediaType != PHAssetMediaTypeImage) continue;

    // 图片原尺寸
    CGSize targetSize = CGSizeMake(asset.pixelWidth, asset.pixelHeight);
    // 请求图片
    [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:targetSize contentMode:PHImageContentModeDefault options:imageOptions resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
      NSLog(@"图片:%@", result);
    }];
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • iOS archive保存图片到本地的方法

    本文实例为大家分享了iOS保存图片到本地的具体代码,供大家参考,具体内容如下 一.工程图 二.代码 RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController { UIImageView *imageView; } @end RootViewController.m #import "RootViewController.h" @interface

  • iOS中读取照片库及保存图片或视频到照片库的要点解析

    读取照片库PhotoLibrary iOS中如果我们只有一次读取一张图片或者一个视频(或拍一张照片/视频)的需求,那么我们用 UIImagePickerController 就可以搞定.但是很多时候我们需要一次性从PhotoLibrary读取多个照片或者视频,这时候我们就需要另辟蹊径了,好在apple为我们提供了相应的接口. 在开始coding之前我们想要认识几个类: ALAssetsLibrary:代表整个PhotoLibrary,我们可以生成一个它的实例对象,这个实例对象就相当于是照片库的句

  • iOS实现图片保存与搜索功能

    本文实现Photos.framework的常见功能,包括:创建自定义相册.保存图片到自定义相册.搜索所有相册的图片,具体内容如下 1.保存图片到相册 /** * 保存图片到相册 */ - (IBAction)saveImage { PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus]; if (status == PHAuthorizationStatusDenied) { NSLog(@"请到[设置-隐私-照片]

  • iOS 把图片保存到相册,并获取图片文件名的实例

    实例如下所示: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; if (picker.sourceType == UIImagePickerControllerSo

  • Python实现base64编码的图片保存到本地功能示例

    本文实例讲述了Python实现base64编码的图片保存到本地功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 import os import base64 sss ="""/9j/4AAQSkZJRgABAQEASABIAAD//gAyUHJvY2Vzc2VkIEJ5IGVCYXkgd2l0aCBJbWFnZU1hZ2ljaywgejEuMS4wLiB8fEIy/9sAQwAGBAUGBQQGBgUGBwcGCAoQ

  • Android实现长按图片保存至相册功能

    前言:前面写了一篇reactnative的学习笔记,说reactnative的Android框架中有很多福利,确实是的,也说到了我们app中的一个把图片保存到相册的功能,好吧,还是准备写一篇博客,就当笔记了- 先上几张app的图片: 一进app就是一个进度条加载图片(我待会也会说一下进度条view跟怎么监听图片加载过程): 图片加载完毕后: 长按图片进入相册可以看到我们保存的图片: 监听图片加载的loaddingview源码(不是很难,我就直接贴代码了): package com.leo.cam

  • iOS实现图片压缩的两种方法及图片压缩上传功能

    两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size). 压缩图片质量 NSData *data = UIImageJPEGRepresentation(image, compression); UIImage *resultImage = [UIImage imageWithData:data]; 通过 UIImage 和 NSData 的相互转化,减小 JPEG 图片的质量来压缩图片.UIImageJPEGRepresentation:: 第二个参数 compressi

  • iOS实现图片存在本地、再从本地获取图片的功能

    iOS实现图片存在本地.再从本地获取图片的功能,代码如下: //将图片保存到本地 + (void)SaveImageToLocal:(UIImage*)image Keys:(NSString*)key { NSUserDefaults* preferences = [NSUserDefaults standardUserDefaults]; //[preferences persistentDomainForName:LocalPath]; [preferences setObject:UII

  • Android实现搜索功能并本地保存搜索历史记录

    本文实例为大家分享了Android实现搜索功能,并且需要显示搜索的历史记录,供大家参考,具体内容如下 效果图: 本案例实现起来很简单,所以可以直接拿来嵌入项目中使用,涉及到的知识点: - 数据库的增删改查操作 - ListView和ScrollView的嵌套冲突解决 - 监听软键盘回车按钮设置为搜索按钮 - 使用TextWatcher( )实时筛选 - 已搜索的关键字再次搜索不重复添加到数据库 - 刚进入页面设置软键盘不因为EditText而自动弹出 代码 RecordSQLiteOpenHel

  • Android 实现WebView点击图片查看大图列表及图片保存功能

    在日常开发过程中,有时候会遇到需要在app中嵌入网页,此时使用WebView实现效果,但在默认情况下是无法点击图片查看大图的,更无法保存图片.本文将就这一系列问题的实现进行说明. 图示: 项目的知识点: 加载网页后如何捕捉网页中的图片点击事件: 获取点击的图片资源后进行图片显示,获取整个页面所有的图片: 支持查看上下一张的图片以及对图片缩放显示: 对图片进行保存: 其他:图片缓存的处理(不用每次都重新加载已查看过的图片) 项目代码结构: 前期准备(添加权限.依赖和混淆设置): 添加权限: <us

  • iOS 沙盒图片保存读取实例

    实例如下所示: //保存图片 -(void)saveImageDocuments:(UIImage *)image{ //拿到图片 UIImage *imagesave = image; NSString *path_sandox = NSHomeDirectory(); //设置一个图片的存储路径 NSString *imagePath = [path_sandox stringByAppendingString:@"/Documents/test.png"]; //把图片直接保存到

  • 微信小程序实现的图片保存功能示例

    本文实例讲述了微信小程序实现的图片保存功能.分享给大家供大家参考,具体如下: 微信小程序保存图片分为两步: 1.下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径. 即:调用函数wx.downloadFile({}) 2.保存图片到系统相册. 即:调用函数wx.saveImageToPhotosAlbum({}) 具体代码如下: .wxml <button data-image='{{图片路径}}' bindtap="saveImage" &g

随机推荐