uni-app中uni.chooseImage无法获取iCloud照片

uni-app中uni.chooseImage无法获取iCloud照片

项目信息 详细信息
产品分类 uniapp/App
PC开发环境 Mac
PC开发环境版本 macOS 12
HBuilderX类型 正式
HBuilderX版本 3.3.13
手机系统 全部
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

uni.chooseImage({
count: 1, //默认9
// sizeType:['original', 'compressed'],
crop:{
width:systemInfo.screenWidth,
height:systemInfo.screenHeight /2
},
success: res => {
var src = res.tempFilePaths[0];
console.log(src);
this.uploadImage(src)
}
});

操作步骤:

预期结果:

实际结果:

bug描述:

如果选了crop,就无法获取 iCloud 上的照片,使用 sizeType 就可以。但是我必须要crop 裁切,因为上传的头像要正方形的

11 回复

请提供录屏(上传附件)看下表现,并说明设备具体信息 【bug优先处理规则】https://ask.dcloud.net.cn/article/38139


uni.chooseImage 你用一下这个就直接能看到了啊

确实 遇到了相同的问题 相册中的照片开启了iCloud的时候 crop获取不了 点开白屏

你有替代方案吗

回复 我可爱的app: 没用crop选项,自己写了个裁剪组件,先选择图片,再把选择的图片传到组件里。

回复 s***@ctycode.io: 多了一个步骤啊

回复 我可爱的app: 没办法 你有更好的方法吗?

回复 s***@ctycode.io: 没有,这个属于bug吧,就看官方当不当回事了

回复 我可爱的app: 好像是修复了 刚刚打包发现能icloud的照片在选择的时候会自动下载了

回复 s***@ctycode.io: 我一会看看

uni-app 中使用 uni.chooseImage 方法时,如果无法获取 iCloud 照片,可能是由于以下原因:

1. iCloud 照片未下载到本地

  • iCloud 照片默认是存储在云端,而不是本地设备。如果照片没有下载到本地设备,uni.chooseImage 可能无法访问这些照片。
  • 解决方法:确保你要选择的照片已经下载到本地设备。你可以在 iOS 设备的“照片”应用中查看照片是否已经下载。

2. 权限问题

  • uni.chooseImage 需要访问设备的相册权限。如果应用没有获取到相册权限,可能无法访问 iCloud 照片。
  • 解决方法:确保应用已经获取了相册权限。你可以在设备的“设置”中检查应用的权限设置,并确保相册权限已经开启。

3. uni.chooseImage 的限制

  • uni.chooseImage 是基于微信小程序的 wx.chooseImage 实现的,它可能无法直接访问 iCloud 照片库。
  • 解决方法:如果你需要访问 iCloud 照片库,可能需要使用原生开发的方式来实现,或者使用其他第三方插件。

4. iOS 系统限制

  • iOS 系统对应用访问相册有一定的限制,特别是对于 iCloud 照片。某些情况下,应用可能无法直接访问 iCloud 照片。
  • 解决方法:你可以尝试使用 iOS 的原生 API 来访问 iCloud 照片,或者提示用户将照片下载到本地设备。

5. uni-app 版本问题

  • 如果你使用的 uni-app 版本较旧,可能存在一些兼容性问题。
  • 解决方法:尝试更新 uni-app 到最新版本,看看问题是否得到解决。

6. 使用原生插件

  • 如果 uni.chooseImage 无法满足你的需求,你可以考虑使用原生插件来访问 iCloud 照片。
  • 解决方法:开发一个原生插件,使用 iOS 的 PHPhotoLibrary 来访问 iCloud 照片,并在 uni-app 中调用该插件。

示例代码

如果你决定使用原生插件,以下是一个简单的示例:

// iOS 原生代码
#import <Photos/Photos.h>

- (void)chooseImageFromiCloud {
    PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
    fetchOptions.predicate = [NSPredicate predicateWithFormat:@"mediaType == %d", PHAssetMediaTypeImage];
    PHFetchResult *fetchResult = [PHAsset fetchAssetsWithOptions:fetchOptions];
    
    if (fetchResult.count > 0) {
        PHAsset *asset = [fetchResult firstObject];
        PHImageRequestOptions *requestOptions = [[PHImageRequestOptions alloc] init];
        requestOptions.version = PHImageRequestOptionsVersionCurrent;
        requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
        requestOptions.synchronous = YES;
        
        [[PHImageManager defaultManager] requestImageForAsset:asset
                                                   targetSize:CGSizeMake(asset.pixelWidth, asset.pixelHeight)
                                                  contentMode:PHImageContentModeAspectFill
                                                      options:requestOptions
                                                resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
            if (result) {
                // 处理图片
                NSData *imageData = UIImageJPEGRepresentation(result, 1.0);
                // 将图片数据传递给 uni-app
            }
        }];
    }
}

uni-app 中调用原生插件:

// uni-app 中调用原生插件
const plugin = uni.requireNativePlugin('YourPluginName');
plugin.chooseImageFromiCloud((res) => {
    console.log(res);
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!