最近做了一个壁纸类app,涉及到了livephoto相关的内容,做个记录
livephoto实际上是由一张jpg图片和一段mov视频组成,想要从网络后台获取livephoto, 后台应该是以一张图片对应一段视频的方式存储livephoto,手机端通过网络下载好对应的图片和视频之后.利用系统Photos.framew中提供的方法将图片和视频合成PHLivePhoto,之后可以通过PhotoUI中的PHLivePhotoView来展示PHLivePhoto对象,或者通过PHAssetCreationRequest的方法保存livephoto到相册
首先导入framework,之后引入头文件
#import <Photos/Photos.h>
#import <PhotosUI/PhotosUI.h>
在下载完图片与视频并保存在本地之后,我们通过传入下载好的视频与图片的本地url来生成PHLivePhoto对象
[PHLivePhoto requestLivePhotoWithResourceFileURLs:@[self.movUrl ,imgUrl] placeholderImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:imgUrl]] targetSize:self.imageView.bounds.size contentMode:PHImageContentModeAspectFill resultHandler:^(PHLivePhoto * _Nullable livePhoto, NSDictionary * _Nonnull info) {
要展示livephoto, 需要创建PHLivePhotoView控件,再将上个方法得到的PHLivePhoto对象赋值给PHLivePhotoView,之后PHLivePhotoView调用播放方法就可以开始展示livephoto了
self.livePhotoView = [[PHLivePhotoView alloc] init];//创建
self.livePhotoView.livePhoto = livePhoto;// 赋值
[self.livePhotoView startPlaybackWithStyle:PHLivePhotoViewPlaybackStyleFull]; // 播放
保存livephoto到相册
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetCreationRequest * req = [PHAssetCreationRequest creationRequestForAsset];
[req addResourceWithType:PHAssetResourceTypePhoto fileURL:self.imgUrl options:nil];
[req addResourceWithType:PHAssetResourceTypePairedVideo fileURL:self.movUrl options:nil];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
[self showMessage:@"已保存至相册"];
}else
[self showMessage:@"保存失败"];
LivePhotosKit JS 实现实况图预览
官网:https://developer.apple.com/documentation/livephotoskitjs
示例:https://developer.apple.com/live-photos/
1.html
<template>
<div class="box">
<!-- 图片 -->
<div id="myExistingElement"></div>
1.livePhoto简介
livePhoto是iOS 9.0 之后系统相机提供的拍摄动态照片的功能,但是仅在6S+,iOS 9.0+设备可用。拍摄完livePhoto之后,只需要在相册按压livePhoto相片即可动态的播放。livePhoto还可以设置为动态壁纸。如果只能用相机拍摄的...
在iOS和tvOS中,你可以使用这个类来从用户的图库中(使用PHAsset和PHImageManager类获取)引用Live Photo,在其他的位置(如通过社交网络分享图片)使用获得的数据来加载展示Live Photo对象,并将Live Photo加载在PHLivePhotoView上来进行展示。在iOS和tvOS,以及MacOS中,你可以使用这个类来在一个照片编辑扩展中展示编辑Live Photo的过程。注意。
获取一个对象之后,使用一个Live Photo视图来展示这个照片并且控制播放它的动作和声音内容。在iOS和tvOS中,你可以使用或者PHAsset以及类或者通过创建一个从照片库中导出的资源来从照片库中获取Live Photo对象。在MacOS中,Live Photo对象只在运行Photos应用中的一个照片编辑扩展中编辑Live Photo的内容时有效。——查看类在编辑会话中获取Live Photo内容。注意关于如何将Live Photo和你的应用的用户体验整合到一起,请查看中的Live Photos。
业务场景:webapp点击图片保存到相册思路:点击保存到相册要调用保存到相册的save方法,第一个参数为手机的本地文件路径,这个就有一个问题我们需要将当前的页面的文件先存入手机的系统文件中,经过api的寻找发现nativeObj中的bitmap是可以通过loadBase64Data()将base64转换成原生图片对象,之后使用bitmap.save可以将原生图片对象放入系统文件并且通过成功回调获得...
is only available on iOS 9.0 or newer
出现此报错的原因是你使用了只适用于新版本的API,解决方法十分简单,先检查平台
if #available(iOS 9.0, *) {
//把出现报错的特性在这里处理
} else {
//ios9以下的如需处理在这里用低版本API处理
PHAsset
照片库中的一个单独的资源(狭隘可以理解为一张图或则一段视频),以元数据的方式提供,包含所有该资源的信息(例如:唯一标识、创建时间、大小、类型、地点、是否被标记为喜欢等)
用来获取照片库中的PHAsset对象
判断资源类型
通过PHAsset的PHAssetMediaType判断是image还是video
public enum PHAssetMediaType : Int...
对于 Photos 框架的介绍,推荐观看 objccn.io 的文章。写得真好,我写得的文章水准还差得老远啊。本文总结了近期使用 Photos 框架编写一个相册的经验,目前还有很大一部分的框架内容没有涉及到,后续会更新内容。
获取资源
照片库中有两种资源可供获取:PHAsset和PHCollect